15. 敵の移動パターン(sin波)。
敵をsin波のように波打って表示させようと思います。
先ほどのサンプルをすでに見た方はどんな動きをするか実感がわくと思います。
図のような半径1の単位円を考える時、sin xはxが0〜π/2になるまでに0〜1に増加します。π/2〜πまでは1〜0に戻ります。
3π/2で-1になり、2πで0に戻ります。
πは
#define PI 3.141593
と定義しておいて利用します。
今、下へ移動しながらsin波を表現したいので、yを一定の速度で降下させ、xをsinの値を用いて変化させましょう。
答えを先に書くと関数の中身はこのようになっています。
void EnemyPattern3(int i){ enemy[i].x+=sin(PI*enemy[i].counter/40.0f)*5.0f; enemy[i].y+=1.5f; }
こうなります。エネミーcounterが40にったとき、πとなり、80になった時2πとなり、元に戻ります。
つまり80が周期です。この値を多くするとゆっくり、少なくすると早く動きます。sinは最大で1の値になりますから
単なるsinの値だけたしていったのでは、見た目少ししか変化しません。ですから5をかけてsinの値を5倍してやりましょう。
サンプルプログラムはすでに書きましたので、前章を参考にしてください。
DXライブラリ著作権表示
DX Library Copyright (C) 2001-2006 Takumi
Yamada.