我正在制作一款具有 3 个独立 NPC 的 PICO-8 游戏。我想给每个人一个移动系统,这样当他们移动时,他们会在屏幕上选择一个随机位置,走向它,到达该位置后,选择一个新的随机位置并前往该位置;冲洗并重复。
有人告诉我,我应该使用欧几里得距离公式让他们(NPC)向一个点移动,然后据此计算他们的移动,我尝试这样做,但我远没有他们先进,所以我无法自己实现这个。
这是迄今为止我所拥有的一切运动:
function cleric_movement()
cleric_dx = rnd(2) - 1
cleric_dy = rnd(2) - 1
cleric_target_x = rnd(128)
cleric_target_y = rnd(128)
d = sqrt((cleric_target_x - cleric_c)^2 + (cleric_target_y - cleric_y)^2
cleric_x += sgn(cleric_dx)
cleric_y += sgn(cleric_dy)
cleric_stop_at_edge()
end
function cleric_stop_at_edge()
if (cleric_x<0) cleric_x=0
if (cleric_x>111) cleric_x=111
if (cleric_y<0) cleric_y=0
if (cleric_y>111) cleric_y=111
end
需要明确的是,每个 NPC 都应该选择 他们自己的目标 x 和 y 变量!!
感谢您的帮助!
附注如果有人知道一个更好的地方来发布有关 PICO-8 的问题,因为这个网站没有很多 PICO 问题(这个有 31 个),并且可能不会有很多人熟悉它,请告诉我可以把这个带到哪里。
我会像这样生成目标位置:
dx = d * cos(A) dy = d * sin(A)
如果此是有效位置,则朝其移动。 如果这不是有效位置,则尝试生成新的目标位置。
该算法的优点是保持NPC的行走速度恒定且合理。
如果 NPC 被逼到角落,那么他们可能需要多次重新滚动目标位置,但他们几乎会立即逃脱。