ゲーム制作、敵の移動アルゴリズム

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
うずら

ゲーム制作、敵の移動アルゴリズム

#1

投稿記事 by うずら » 11年前

僕は今シューティングゲームを制作中しています。
敵の移動のアルゴリズムについての質問です。

やりたいことは、
指定したフレーム(回数)で
指定した座標に
徐々に減速しながら(最終的に速度が0になる)移動する、というものです。

X += (TargetX - X) / Frame * NowFrame;
このような式でやっていたんですが、急に止まるよりも徐々に減速させた方が綺麗に見えるので。
ベジェ曲線でもやってみましたが、それだと徐々に減速して最終的に止まるというわけではないので(-_-;)

○→→→→→○→→→→○→→→→○→→○→○(イメージとしてはこんな感じ。)
この動画の8:30のあたりみたいな移動です

「~~曲線を使えばできます」とかちょっとしたことでもご教示ください。お願いしますm(_ _;m

アバター
usao
記事: 1889
登録日時: 12年前
連絡を取る:

Re: ゲーム制作、敵の移動アルゴリズム

#2

投稿記事 by usao » 11年前

単純に等加速度だとすると,
初速V0, 移動したい距離L, 移動にかかる時間t に関して
V0 * t /2 = L
みたいな関係が成り立ちそうな気がします.

Lは決まってるでしょうから,tかV0のどちらかを所望の値にすれば
上式から他方が求まるので
後は,加速度を -V0/t みたくすればいけるかな? なんとなくですが.

アバター
usao
記事: 1889
登録日時: 12年前
連絡を取る:

Re: ゲーム制作、敵の移動アルゴリズム

#3

投稿記事 by usao » 11年前

あるいは,
>ベジェ曲線でもやってみましたが…
とのことですが,

時刻と位置に関する2次元の曲線を作れば,速度とかを考えなくても
各時刻における位置がダイレクトに得られるのではないでしょうか.
添付ファイル
クリップボード01.png
クリップボード01.png (15.12 KiB) 閲覧数: 2709 回

うずら

Re: ゲーム制作、敵の移動アルゴリズム

#4

投稿記事 by うずら » 11年前

すいません、自己解決してしまいました。

初期化処理

求める地点とのX,Y距離をそれぞれ計算、現在の座標を保存、sin関数に与える変数を0にする、sinに与える変数の移動一回ごとの増加値を移動に使う回数から計算。

移動処理

sinに与える変数を一定量増加
X,Y座標にそれぞれ、初期値+距離*sin関数の値を代入する。

コード:

void Boss::MoveSinMain()
{
  MSin[4] += MSin[5];

  X = MSin[0] + MSin[2] * sin(MSin[4]);
  Y = MSin[1] + MSin[3] * sin(MSin[4]);
}

void Boss::MoveSinSet(double pTX, double pTY, int pFrame)
{
  MSin[0] = X;
  MSin[1] = Y;
  MSin[2] = pTX - X;
  MSin[3] = pTY - Y;
  MSin[4] = 0;
  MSin[5] = DegToRad90 / pFrame;   // DegToRad90は定数。90度をラジアンに変換したもの。
}

閉鎖

“C言語何でも質問掲示板” へ戻る