敵の動きを遅くする小技(その2)
※randomの引数の100は、状況に合わせて適切な値にしてください
1.利用シーン
パックマンや横スクロールゲームなど、敵が上下左右の4方向にランダムに動くゲームの場合、敵の動く方向を下記のようにrandomで決めて敵を動かすと、敵の動きが速すぎてしまう場合があります。
teki_houkou = int(random(4))
その場合、タイマーやフレームカウント(frameCount )を使って敵の動きを遅らせることもできますが、もっと簡単に速さを調整する方法があります。それが
teki_houkou = int(random(100));
です。(randomの引数は4より大きければ100でなくても構いません。状況に合わせて適切な値にしてください)
下記のプログラムを実際に動かして比較してみてください。
2.小技を使わない場合
敵はものすごく速く動いてしまいます。
float teki_x=300;float teki_y=200;int teki_houkou;
void setup() { size(600, 400);}
void draw() { background(0); teki_houkou = int(random(4)); if (teki_houkou == 0) { teki_x += 40; } else if (teki_houkou == 1) { teki_x -= 40; } else if (teki_houkou == 2) { teki_y += 40; } else if (teki_houkou == 3) { teki_y -= 40; } rect(teki_x, teki_y, 40, 40);}
3.小技を使った場合
下記の例ではteki_houkouはrandomにより0~99の値を取りますが、4~99は敵の動きにはならなず(if文に引っかからずに無視される)、結局敵は4/100の確率で動くことになります。randomの引数を調整することで、動く速さを調整できます。
float teki_x=300;float teki_y=200;int teki_houkou;
void setup() { size(600, 400);}
void draw() { background(0); teki_houkou = int(random(100)); if (teki_houkou == 0) { teki_x += 40; } else if (teki_houkou == 1) { teki_x -= 40; } else if (teki_houkou == 2) { teki_y += 40; } else if (teki_houkou == 3) { teki_y -= 40; } rect(teki_x, teki_y, 40, 40);}
※この小技は、敵が画面上を動く時に使えます。敵が動かない場合は、frameCount を使った方法の方が便利でしょう。frameCount を使った小技は、敵の動きを遅くする小技(その1) を参照してください。