Home>戻る
〜第17章 イベントの強制移動と一時消去〜
↑手紙と立て札を調べてみて下さい。
手紙を調べると、手紙が一時的に消去されます。マップを入りなおすと復活しています。
立て札を調べると、立て札が動き回り、その後主人公が動き回ります。
一時消去からやりましょう。
スクリプトには「temperace:」と一行だけ書きます。
この処理はまずイベントマップからそのイベントを消します。
eventdata[event.x][event.y] = 0;
そしてイベントのアクティブフラグを消します。
event.sh = false;
このフラグはイベントクラスに新たに設けました。
マップ読み込み時に全てのイベントのアクティブフラグをtrueにするようにし、
このフラグがtrueの時にのみイベントの処理・描画を行うようにします。
次にイベントの強制移動です。
スクリプトに以下のように記述します。
emove:right
emove:right
emove:down
emove:down
emove:left
emove:left
emove:left
emove:left
一度に動かすのではなくて、1チップずつ動かして連続で動いているように見せています。
これは右に2チップ、下に2チップ、左に4チップという動きをします。
会話中の時のように、強制移動用のフラグ・バッファを設け、管理してやります。
新しく関数を用意する必要はなく、CharaMovingとMyMovingのところを多少変えるだけでOKです。
<スクリプト部分>
//イベント強制移動
else if(command.equals("emove")){
System.out.println("Do:emove");
//方向
if(value.equals("up")){eventtbl[ game_buffer[0] ].moving_dir = 0;}
else if(value.equals("down")){eventtbl[ game_buffer[0] ].moving_dir = 1;}
else if(value.equals("left")){eventtbl[ game_buffer[0] ].moving_dir = 2;}
else if(value.equals("right")){eventtbl[ game_buffer[0] ].moving_dir = 3;}
game_flags[11] = true;
next_flag=false;
}
//主人公強制移動
else if(command.equals("mymove")){
System.out.println("Do:mymove");
//方向
if(value.equals("up")){My.moving_dir = 0;}
else if(value.equals("down")){My.moving_dir = 1;}
else if(value.equals("left")){My.moving_dir = 2;}
else if(value.equals("right")){My.moving_dir = 3;}
game_flags[12] = true;
My.sum_move_length = 0.0f;
next_flag=false;
}
<プログラム公開>
Rpg17.java
プロジェクト一式ダウンロード(データ含む)