对于简单的游戏,我正在为学习目的而制作,我正在尝试使角色从A点移动到B点。
我已经尝试过一些方法,但是发现的唯一方法是先将B点的X值变为Y值
public void Walk(Vector2D target)
{
var distance = Character.Position.Distance(target);
bool positiveX = target.X > Character.Position.X;
bool positiveY = target.Y > Character.Position.Y;
for (var i = 0; i < distance.X; i++)
{
var position = Character.Position.Clone();
position.X = (positiveX ? 1 : -1) + position.X;
if (Map.IsWalkable(position))
{
Character.Move(position);
}
}
for (var i = 0; i < distance.Y; i++)
{
var position = Character.Position.Clone();
position.Y = (positiveY ? 1 : -1) + position.Y;
if (Map.IsWalkable(position))
{
Character.Move(position);
}
}
}
答案 0 :(得分:0)
首先,您需要一个循环,而不是两个循环。其次,您不能在y方向上的每一步在x方向上移动。相反,您需要按照相同数量的步骤将它们平均分配:
public void Walk(Vector2D target)
{
var distance = Position.Distance(target);
var steps = 5;
var stepX = distance.X / steps;
var stepY = distance.Y / steps;
bool positiveX = target.X > Position.X;
bool positiveY = target.Y > Position.Y;
for (var i = 0; i < steps; i++)
{
var position = Position.Clone();
position.X = (positiveX ? 1 : -1) * stepX + position.X;
position.Y = (positiveY ? 1 : -1) * stepY + position.Y;
if (Map.IsWalkable(position))
{
Character.Move(position);
}
}
}
在这里,我选择了5个步骤。或者,您可以选择固定距离以在每个步骤上移动。然后,您可以使用一些三角函数或比例来计算沿x和y方向移动的距离,以使所选距离沿直线移动。