>> シューティングゲーム作成入門トップに戻る
今回は敵の移動パターンを増やしてみましょう。
今回修正するのは、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のときだけ処理するようにしているので、
もう無駄な移動処理は実行されなくなります。
これらの移動パターンを使って下記のような敵データを作りました。

これを使って、プログラムを実行すると以下の動画のように敵が出現します。
さっきより移動パターンが増えてますよね?
今回説明した移動パターンはただのサンプル程度と思ってください。
自分で色々とコードを変更して、それぞれ好きな動作をさせてみてください。
今回の説明は以上です。
次回は敵のショットパターンを増やしてみましょう。
>> 【敵のショットパターンを増やそう】に進む
>> シューティングゲーム作成入門トップに戻る













