0
나는 대학에서 내 게임 디자인 수업을 위해 C# xna에서 2D RPG 게임을 만들었습니다. 적을 플레이어쪽으로 이동시키는 간단한 AI를 만들려고합니다.XNA 벡터 수학 이동
/// <summary>
/// updates the enemy
/// </summary>
public void update()
{
this.Position = move(Game1.player.Position);
}
하지만 적은 전혀 움직이지 않습니다 현재 내 코드는 대상이 업데이트 방법에 올바르게 전달 된 다음
/// <summary>
/// method to move the enemy
/// </summary>
/// <param name="target">the position of the target</param>
/// <returns>the new position to be moved to</returns>
public virtual Vector2 move(Vector2 target)
{
Vector2 temp = (target - Position); // gets the difference between the target and position
temp.Normalize(); // sets the vector to unit vector
temp *= moveSpeed; // sets the vector to be the length of moveSpeed
float x = temp.X;
float y = temp.Y;
float xP, yP;
double angle = Math.Acos(((x * direction.X) + (y * direction.Y))/(temp.Length() * direction.Length())); //dot product finds the angle between temp and direction
angle *= agility; //gets the angle to move based on agility
xP = (float)(Math.Cos(angle) * (x - direction.X) - Math.Sin(angle) * (y - direction.Y) + x);
yP = (float)(Math.Sin(angle) * (x - direction.X) - Math.Cos(angle) * (y - direction.Y) + y); // these lines rotate the point x,y around the direction vector by angle "angle"
return new Vector2(xP, yP);
}
입니다. 민첩성 및 이동 속도가 0이 아니 었는지 확인하는 코드를 생성자에 추가했습니다. 이러한 값을 변경하면 아무 것도 수행되지 않습니다.
도움 주셔서 감사합니다. 코드에서
왜'Dot' 방법을 사용하지? – phoog
'Math.Atan2 ((PlayerPosition.Y - EnemyPosition.Y), (PlayerPosition.X - EnemyPosition.Y)))'를 사용할 수도 있습니다. 각도를 계산합니다. 나는 그것을 읽고 이해하기가 더 쉽다. –