我正在用c# xna为我的大学游戏设计课制作一个自上而下的2D RPG游戏。我正在尝试创建一个简单的AI,将敌人推向玩家。目前我的代码如下
/// <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);
}
目标在更新方法中正确传入:
/// <summary>
/// updates the enemy
/// </summary>
public void update()
{
this.Position = move(Game1.player.Position);
}
但是敌人根本不动。我向构造函数添加了代码,以确保敏捷性和移动速度不为 0。更改这些值不会执行任何操作。
感谢您的任何帮助。
在你的代码中,你返回这个(方向角的代码):
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);
但是您需要返回此内容以进行移动:
temp *= moveSpeed; // sets the vector to be the length of moveSpeed
float x = temp.X;
float y = temp.Y;
...
return new Vector2(x, y);