问题

我有一个工作怪物系统,跟踪玩家,将一定距离移动到玩家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);
 

  相同标签的其他问题

c++