如何让NPC随机移动?

问题描述 投票:0回答:1

我正在制作一款具有 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 个),并且可能不会有很多人熟悉它,请告诉我可以把这个带到哪里。

random pico-8
1个回答
0
投票

我会像这样生成目标位置:

  1. 选择 0 到 360 度之间的角度 A
  2. 选择 NPC 必须行进的距离 d
  3. 根据角度和距离计算 dx 和 dy 值:

dx = d * cos(A) dy = d * sin(A)

  1. 如果 NPC 位于坐标 (x, y),请检查 (x + dx, y + dy) 是否为地图上的有效位置:

如果此有效位置,则朝其移动。 如果这不是有效位置,则尝试生成新的目标位置。

该算法的优点是保持NPC的行走速度恒定且合理。

如果 NPC 被逼到角落,那么他们可能需要多次重新滚动目标位置,但他们几乎会立即逃脱。

© www.soinside.com 2019 - 2024. All rights reserved.