XNAメモ – 敵をキャラクターに向けて移動させる方法

Posted: 2012年2月1日 カテゴリー: プログラミングメモ, XNA, XNAメモ
タグ:, , , , ,

今回はプレイヤーに向けて敵を移動させる方法をメモります。

基本的にやることは、毎フレーム敵にプレイヤーの位置情報を渡し、それを元に移動する方向を計算するだけです。

移動方向を計算するには、[プレイヤーの位置のベクトル – 敵の位置のベクトル] の結果を正規化するだけです。

まず、敵クラスの宣言です。

class Enemy
{
protected Texture2D m_texture;
public Vector2 Position;
public Vector2 PlayerPos;
protected float m_speed;

public Enemy(Texture2D texture, Vector2 pos, Vector2 playerPos, float speed)
{
m_texture = texture;
Position = pos;
PlayerPos = playerPos;
m_speed = speed;
}

次に移動処理です。

public virtual void Update(float delta)
{
// プレイヤーへの向きを獲得
Vector2 direction = PlayerPos - Position;

// ベクトルを、正規化し、向きだけを保存させる
direction.Normalize();

// 敵の移動
Position += direction * m_speed * delta;
}

後は、毎フレーム敵のUpdate()メソッドのを呼ぶ前にプレイヤーの位置情報を渡すだけです。

// 前のフレームから経過した時間を獲得する
float delta = (float)gameTime.ElapsedGameTime.TotalSeconds;

// プレイヤーの移動
player.Update(delta);

// プレイヤーの位置を敵に保存する
enemy.PlayerPos = player.Position;

// 敵の移動
enemy.Update(delta);

以上です。実装後はこんな感じになります。(Pがプレイヤーで、Eが敵です)

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中