現在、「ゲームプログラミングの館」を参考にゲーム制作を行っておりますが、
敵の行動処理の部分で詰まっております。
ゲームの内容としては東方の2Dシューティングみたいなものです。
■本題
画面左から敵が移動してきて、一定時間後に停止。
停止してから画面中央に対して時計回りに円運動するような行動をとらせたいのですが、
移動する際のx,y成分の算出方法が分かりません(数学の部分)
自分なりに調べてみたのですが、
一定時間後の座標を求めるものが多く、
式の変形も難しかったので、質問させて頂きました。
今の段階で実装したコードは敵の座標(x,y)を直接変更しているのですが、
座標を直接更新するのではなく、速度(dx,dy)を変更して、円運動するようにしたいです。
■参考にしたサイト
「等速円運動の加速度」のベクトルvのx,y成分
■補足
・座標を求める際の数値(278)は、「EnemySub.cnt」が角度として使用するまでにカウントされてしまっているので、決め打ちで調整しました。
・画面サイズは(800,600)です。
プログラムに直接関係ない数学の初歩的な部分かもしれませんが、
ご教示頂けると幸いです。
//5秒後右に向かって移動してから停止
//停止してから5秒後、中心を軸にして円運動(右回転)
void enemy_calc_pattern_006(int i)
{
if (EnemySub[i].cnt < 120)
{
//真右へ移動
EnemySub[i].dx = 2;
}
else if (EnemySub[i].cnt < 420)
{
//停止
EnemySub[i].dx = 0;
}
else if(EnemySub[i].cnt == 420)
{
//軸との距離を求める(半径)
EnemySub[i].range_point = 400 - EnemySub[i].x;
}
else
{
//軸との角度を求める
EnemySub[i].angle = atan2(300 - EnemySub[i].y, 400 - EnemySub[i].x);
//画面中央を軸にして円運動
EnemySub[i].x = 400 + cos(PI2 / 278 * EnemySub[i].cnt) * EnemySub[i].range_point;
EnemySub[i].y = 300 + sin(PI2 / 278 * EnemySub[i].cnt) * EnemySub[i].range_point;
//指定した角度への移動量計算
//EnemySub[i].dx = cos(EnemySub[i].angle) * 2;
//EnemySub[i].dy = sin(EnemySub[i].angle) * 2;
}
}