1

キャラクターがいて、オブジェクトに移動させたいときはいつでも、常に角度に変換する必要があります。例:

int adjacent = myPosition.X - thatPosition.X;
int opposite = myPosition.Y - thatPosition.Y;

double angle = Math.atan2(adjacent, opposite);

myPosition.X += Math.cos(angle);
myPosition.Y += Math.sin(angle);

ベクトルを使用して角度に変換したり元に戻したりするのではなく、オブジェクトを別のオブジェクトに移動する簡単な方法はありますか?

ps私はXNAでコーディングしています

4

1 に答える 1

1

はい、三角関数を最小化して、より線形代数のアプローチを取ることができます。それは次のようになります。

//class scope fields
Vector2 myPosition, velocity, myDestination;
float speed;

//in the initialize method
myPosition = new Vector2(?, ?);
myDestination = new Vector2(?, ?);
speed = ?f;//usually refers to "units (or pixels) per second"

//in the update method to change the direction traveled by changing the destination
float elapsed = (float)gameTime.ElapsedGameTime.TotalSeconds;
myDestination = new Vector2(?', ?');//change direction by changing destination
Velocity = Vector2.Normalize(myDestination - myPosition);
velocity *= speed;

myPosition += velocity * elapsed;

//or instead of changing destination to change velocity direction, you can simply rotate the velocity vector
velocity = Vector2.Transform(velocity, Matrix.CreateRotationZ(someAngle);
velocity.Normalize();
velocity *= speed;

myPosition += velocity * elapsed;

ここで使用される唯一の角度/トリガーは、CreateRotationZ() メソッドに埋め込まれているトリガーであり、xna フレームワークによって舞台裏で行われています。

于 2013-01-05T14:24:13.887 に答える