>> シューティングゲーム作成入門トップに戻る
今回は敵の移動パターンを増やしてみましょう。
今回修正するのは、ENEMYクラスのMove関数です。
単純に移動パターン用のコードを増やすだけです。
以下のコードを見てください。
とりあえず4パターンだけ作成しました。
移動パターン0は今までどおりなので省略します。
移動パターン1ですが、g_countがin_timeを越えたら、yを毎ループごとに2だけ増加するようにしています。
この処理しか書いていないので、yは画面下までとまらずに移動していくことになります。
移動パターン2はg_countがin_timeを越えたら、毎ループごとにyを1だけ増加するようにしてます。
さらにcountを10で割って余りがゼロの時、つまり10ループに一回はx座標を-1するようにしています。
こうすることで若干左に移動しながら、止まらずに下に移動していく動きが表現できます。
移動パターン3は、移動パターン2とほぼ同じで、左ではなく右に移動していくようにしています。
switch文の下に書いてある、if文の処理は画面からはみ出したときにdeadflagをtrueにする処理です。
これをしておかないと、いつまでも敵クラスが残ったままになり、
当たり判定の時や描画時に無駄な処理が発生してしまうからです。
g_countがstop_time以上の時だけ実行するようにしているのは、
停止時間以降ならば、確実に画面の中にいるからです。
この条件をin_time以上としてしまうと、敵が出現直後の時はまだ画面の外にいるので、
その際に条件にひっかかってしまう可能性があるからです。
なおここで実行しているOutCheckという関数は以下のような関数です。
単純に敵のx座標とy座標が画面内にあるかを判定しているだけです。
画面の外にあればtrue,画面内にあれば、falseを返すようにしています。
これを上記Move関数で実行して、結果がtrueならdeadflagをtrueにするようにしています。
一度trueにしてしまえば、Move関数内の処理はdeadflagがfalseのときだけ処理するようにしているので、
もう無駄な移動処理は実行されなくなります。
これらの移動パターンを使って下記のような敵データを作りました。
これを使って、プログラムを実行すると以下の動画のように敵が出現します。
さっきより移動パターンが増えてますよね?
今回説明した移動パターンはただのサンプル程度と思ってください。
自分で色々とコードを変更して、それぞれ好きな動作をさせてみてください。
今回の説明は以上です。
次回は敵のショットパターンを増やしてみましょう。
>> 【敵のショットパターンを増やそう】に進む
>> シューティングゲーム作成入門トップに戻る
敵の移動パターンを増やそう
今回修正するのは、ENEMYクラスのMove関数です。
単純に移動パターン用のコードを増やすだけです。
以下のコードを見てください。
void ENEMY::Move() { //まだ生きてるか画面内に居るときだけ処理 if(!deadflag){ switch(m_pattern){ //途中で止まって、そのまま後ろに帰るパターン case 0: //出てきてから止まる時間までの間なら下に移動 if(in_time<g_count && g_count<stop_time){ y+=2; //帰還時間を過ぎたら戻る。 }else if(g_count>out_time){ y-=2; } break; //そのまま止まらずに下に行くパターン case 1: if(in_time<=g_count){ y+=2; } break; //ちょっとずつ左に移動しながら消えていく case 2: if(in_time<=g_count){ y+=1; if(count%10==0){ x-=1; } } break; //ちょっとずつ右に移動しながら消えていく case 3: if(in_time<=g_count){ y+=1; if(count%10==0){ x+=1; } } break; } //画面からはみ出したら、deadflag(はみ出すか死ぬかのフラグ)をtrueにする。 if(g_count>=stop_time){ if(OutCheck()){ deadflag=true; } } ++count; } }
とりあえず4パターンだけ作成しました。
移動パターン0は今までどおりなので省略します。
移動パターン1ですが、g_countがin_timeを越えたら、yを毎ループごとに2だけ増加するようにしています。
この処理しか書いていないので、yは画面下までとまらずに移動していくことになります。
移動パターン2はg_countがin_timeを越えたら、毎ループごとにyを1だけ増加するようにしてます。
さらにcountを10で割って余りがゼロの時、つまり10ループに一回はx座標を-1するようにしています。
こうすることで若干左に移動しながら、止まらずに下に移動していく動きが表現できます。
移動パターン3は、移動パターン2とほぼ同じで、左ではなく右に移動していくようにしています。
switch文の下に書いてある、if文の処理は画面からはみ出したときにdeadflagをtrueにする処理です。
これをしておかないと、いつまでも敵クラスが残ったままになり、
当たり判定の時や描画時に無駄な処理が発生してしまうからです。
g_countがstop_time以上の時だけ実行するようにしているのは、
停止時間以降ならば、確実に画面の中にいるからです。
この条件をin_time以上としてしまうと、敵が出現直後の時はまだ画面の外にいるので、
その際に条件にひっかかってしまう可能性があるからです。
なおここで実行しているOutCheckという関数は以下のような関数です。
bool ENEMY::OutCheck() { if(x<-50 || x>520 || y<-50 || y>530){ return true; }else{ return false; } }
単純に敵のx座標とy座標が画面内にあるかを判定しているだけです。
画面の外にあればtrue,画面内にあれば、falseを返すようにしています。
これを上記Move関数で実行して、結果がtrueならdeadflagをtrueにするようにしています。
一度trueにしてしまえば、Move関数内の処理はdeadflagがfalseのときだけ処理するようにしているので、
もう無駄な移動処理は実行されなくなります。
これらの移動パターンを使って下記のような敵データを作りました。
これを使って、プログラムを実行すると以下の動画のように敵が出現します。
さっきより移動パターンが増えてますよね?
今回説明した移動パターンはただのサンプル程度と思ってください。
自分で色々とコードを変更して、それぞれ好きな動作をさせてみてください。
今回の説明は以上です。
次回は敵のショットパターンを増やしてみましょう。
>> 【敵のショットパターンを増やそう】に進む
>> シューティングゲーム作成入門トップに戻る