我有一个有效的怪物系统,该系统通过向玩家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);