我有一个有效的怪物系统,该系统通过向玩家2D(X,Y)位置移动一定距离来跟随玩家。

但是,我现在要使这些怪物以随机的时间间隔短距离漫游。假设我们有一个可以以200-300厘米/秒的速度移动的怪物。

我需要知道如何准确确定怪物的目标位置(X,Y)。目前,我只是选择一个介于200-300之间的随机数,然后将这些值添加到怪物当前的X和Y值。尽管这样做有时会超出所需的行驶距离。

我的问题是,如何在X,Y网格上选择一个距当前位置一定距离的位置。

这是我现在拥有的移动代码...

        // Determines if position is changed via addition or subtraction.
        const int positive_or_negative = RandomValueInRange_New(0, 1);

        // Determines how much to move in each direction
        const int x = RandomValueInRange(200, 300);
        const int y = RandomValueInRange(200, 300);
        if (positive_or_negative == 1)
        {
           location.Move(x, y);
        }
        else
        {
           location.Move(-x, -y);
        }

最佳答案

这听起来像是极坐标的工作。您想在给定(随机,在一定范围内)半径的圆上随机选择一个点,然后将该点添加到怪物的当前位置:

// pick a random angle, in radians, between 0 and 2*pi
const double angle = ((double) RandomValueInRange(0, 628318)) / 100000.0;

// pick a random distance between min and max distance
const double radius = RandomValueInRange(200, 300);

// Convert polar co-ordinates to rectilinear co-ordinate deltas
const double dX = cos(angle)*radius;
const double dY = sin(angle)*radius;

// Add the rectilinear co-ordinates to your monster's position
location.Move(dX, dY);

10-08 08:33