「ステップ5」の編集履歴(バックアップ)一覧はこちら
「ステップ5」(2009/12/26 (土) 20:33:39) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
*ステップ5
**イベントスクリプトの実装
-[[ステップ2]]で言及したスクリプト言語の作成から入る。
**データ構造
-テキストファイルにしてマップごとに用意。
-マップに入るたびに、マップデータとともに読み込む。
-イベント用ハッシュテーブルを用意し、それで管理する。
-同じマス上に異なるイベントは配置できない。よって、1つのマップで扱えるイベントは1200個が上限。(マップスクロール可能にした場合はもっと増える)
-1つのマップにイベントを10個も20個もおかないと思うのでハッシュサイズは10くらいにしておく。
**書式と仕様
>event_num,x,y,xsize,ysize,moveflg,solidflg,look1,look2,event_type,name {
>script;
>}
-個々のイベントの初期設定っぽい何か
|名前|備考|
|event_num|イベント番号。0及び-1(負の値)は設定できない。|
|x,y|イベントの座標。(正確にはイベントの左上座標)|
|xsize,ysize|イベントの大きさ。x,yを左上端として、横にxマス、縦にyマスの大きさになる。|
|moveflg|x,yを中心としたユニットの移動範囲の半径。&br()0 : 移動しない。&br()1 : 3 * 3マス内を移動。&br()2 : 5 * 5マス内を移動。|
|solidflg|ユニットが固形として存在するか。&br()0 : ユニットとプレイヤーキャラが重なることができる。&br()1 : ユニットとプレイヤーが重ならない。ユニットのいるマスは壁として扱う。|
|look1|見た目の設定1。画像ファイルの名前を、""で囲んで入力する。空白の場合、見た目はない。(透明ユニット)|
|look2|見た目の設定2。画像ファイル内の何番目の画像を使うか。(ツクールのキャラチップ対応)|
|event_type|イベントタイプ。&br()0 : ノーイベント。&br()1 : オートイベント1 ユニットの上に乗るとイベント発生。&br()2 : オートイベント2 ユニットに隣接するマスに立つとイベント発生。&br()3 : 調べるイベント1 ユニットの上に乗って決定キーでイベント発生。&br()4 : 調べるイベント2 ユニットに隣接するマスでユニットのほうを向いて決定キーでイベント発生。|
|name|イベントを識別する名前。ハッシュのキー|
-script一覧
|script|動作|
|if(条件式){}|条件式が満たされたとき(0以外の時){}内を実行します。|
|moveto "mapname",x,y;|マップmapnameの座標x,yに移動します。|
|walkto x,y;|同一マップ内の座標x,yに歩いて移動します。|
|mes "string";|しゃべります。|
|(変数) = (式);|(変数)に(式)の内容を代入します。|
-変数の使用方法
--int var,scope,first;
符号付き整数型変数varを定義します。firstの値で初期化されます。
イベント内で使う変数は、必ずイベントスクリプトの先頭でこの定義を行ってください。
scopeの値によって、その変数が保持される期間が決定されます。
scope
0 : キャラ永続変数
1 : イベント一時変数
2 : イベント永続変数
str var,scope,"first";
文字列型変数varを定義します。"first"の値で初期化されます。
基本的なことはintと変わりませんが、初期化値が文字列であることに注意してください。
C言語のchar配列と異なり、=による代入や==による比較が可能ですが、1文字ずつ扱うのは面倒です。
イベント永続変数
イベント変数はそのイベント内で保持され、一度イベントを終えても保存され続けます。
セーブデータの肥大化につながるので乱用は避けてください。
イベント一時変数
イベント一時変数evt_aにbを代入します。
イベント一時変数はイベント実行中のみ保持され、一度イベントを終えると有効範囲から外れ、解放されます。
セーブデータの量には全く影響を及ぼさないので、上記のイベント変数よりも気軽に使用できます。
キャラ永続変数
キャラ変数ch_aにbを代入します。
キャラ変数はキャラクターデータとともに保存され、半永久的に使用できます。
セーブデータの肥大化につながるので、乱用は避けてください。
*ステップ5
**イベントスクリプトの実装
-[[ステップ2]]で言及したスクリプト言語の作成から入る。
**データ構造
-テキストファイルにしてマップごとに用意。
-マップに入るたびに、マップデータとともに読み込む。
-イベント用ハッシュテーブルを用意し、それで管理する。
-同じマス上に異なるイベントは配置できない。よって、1つのマップで扱えるイベントは1200個が上限。(マップスクロール可能にした場合はもっと増える)
-1つのマップにイベントを10個も20個もおかないと思うのでハッシュサイズは10くらいにしておく。
**実行
-オートイベントは一歩歩くごとに判定。調べるイベントは決定キーを押すごとに判定。実行条件を満たした場合にプレイヤーをイベントにアタッチする。
-マップデータ上に置かれたイベントハッシュテーブルからイベントを読み出し、イベントデータの構造体ポインタをプレイヤーデータ側に保持する。(プレイヤーをイベントにアタッチする)
-プレイヤーがイベントにアタッチされている時、イベント進行にかかわらないキー操作は許されない。
-イベント終了時、デタッチする。(プレイヤーデータ側に保持されたポインタをNULLで書き換える)
-マップ移動実行時のみ、実行中のイベントデータの構造体を丸ごとコピーして一時的に静的領域に保持する。(マップ移動時にマップデータごと再読み込みが行われ、イベントハッシュテーブルも解放するため)
**書式と仕様
>event_num,x,y,xsize,ysize,moveflg,solidflg,look1,look2,event_type,name {
>script;
>}
-個々のイベントの初期設定っぽい何か
|名前|備考|
|event_num|イベント番号。0及び-1(負の値)は設定できない。(不要?)|
|x,y|イベントの座標。(正確にはイベントの左上座標)|
|xsize,ysize|イベントの大きさ。x,yを左上端として、横にxマス、縦にyマスの大きさになる。|
|moveflg|x,yを中心としたユニットの移動範囲の半径。&br()0 : 移動しない。&br()1 : 3 * 3マス内を移動。&br()2 : 5 * 5マス内を移動。|
|solidflg|ユニットが固形として存在するか。&br()0 : ユニットとプレイヤーキャラが重なることができる。&br()1 : ユニットとプレイヤーが重ならない。ユニットのいるマスは壁として扱う。|
|look1|見た目の設定1。画像ファイルの名前を、""で囲んで入力する。空白の場合、見た目はない。(透明ユニット)|
|look2|見た目の設定2。画像ファイル内の何番目の画像を使うか。(ツクールのキャラチップ対応)|
|event_type|イベントタイプ。&br()0 : ノーイベント。&br()1 : オートイベント1 ユニットの上に乗るとイベント発生。&br()2 : オートイベント2 ユニットに隣接するマスに立つとイベント発生。&br()3 : 調べるイベント1 ユニットの上に乗って決定キーでイベント発生。&br()4 : 調べるイベント2 ユニットに隣接するマスでユニットのほうを向いて決定キーでイベント発生。|
|name|イベントを識別する名前。ハッシュのキー|
-script一覧
|script|動作|
|if(条件式){}|条件式が満たされたとき(0以外の時){}内を実行します。|
|moveto "mapname",x,y;|マップmapnameの座標x,yに移動します。|
|walkto x,y;|同一マップ内の座標x,yに歩いて移動します。|
|mes "string";|しゃべります。|
|(変数) = (式);|(変数)に(式)の内容を代入します。|
-変数の使用方法
--int var,scope,first;
符号付き整数型変数varを定義します。firstの値で初期化されます。
イベント内で使う変数は、必ずイベントスクリプトの先頭でこの定義を行ってください。
scopeの値によって、その変数が保持される期間が決定されます。
scope
0 : キャラ永続変数
1 : イベント一時変数
2 : イベント永続変数
str var,scope,"first";
文字列型変数varを定義します。"first"の値で初期化されます。
基本的なことはintと変わりませんが、初期化値が文字列であることに注意してください。
C言語のchar配列と異なり、=による代入や==による比較が可能ですが、1文字ずつ扱うのは面倒です。
イベント永続変数
イベント変数はそのイベント内で保持され、一度イベントを終えても保存され続けます。
セーブデータの肥大化につながるので乱用は避けてください。
イベント一時変数
イベント一時変数evt_aにbを代入します。
イベント一時変数はイベント実行中のみ保持され、一度イベントを終えると有効範囲から外れ、解放されます。
セーブデータの量には全く影響を及ぼさないので、上記のイベント変数よりも気軽に使用できます。
キャラ永続変数
キャラ変数ch_aにbを代入します。
キャラ変数はキャラクターデータとともに保存され、半永久的に使用できます。
セーブデータの肥大化につながるので、乱用は避けてください。