使某物同时在X轴和Y轴上移动

时间:2019-07-13 23:30:16

标签: c#

对于简单的游戏,我正在为学习目的而制作,我正在尝试使角色从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);
        }
    }
}

我想在需要时使角色“对角”行走 就像这张图片一样enter image description here

1 个答案:

答案 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方向移动的距离,以使所选距离沿直线移动。