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

プロジェクト一式ダウンロード(データ含む)