使用 Opennoise 在 Pymunk 中创建地形(形状)

Creating Terrain(shape) in Pymunk using Opennoise

我一直在尝试使用 Opennoise 在 pymunk 中创建一个具有 2D 地形的游戏。地形坐标为:

from opensimplex import OpenSimplex
noise = OpenSimplex()
inputs = np.zeros((100002,2))

for x in range(100000):
    inputs[x] = ([x, (noise.noise2d(0.004*x, 0) - 0.125)*100 + 700])
inputs[100000] = ([100000,900])
inputs[100001] = ([0,900])

y 坐标偏移了 +700,因为我使用 pygame 显示所有内容,window 的顶部位于 y = 0,底部位于 y = 800。

然后我创建一个多边形的 pymunk static body,并创建一个 pygame 形状来显示地形,如下所示: (pm = 皮蒙克)

 self.body = pm.Body(10,100,pm.Body.STATIC)
 self.shape = pm.Poly(self.body, inputs)
 space.add(self.body, self.shape)
 pygame.draw.polygon(surface, color, inputs)

pygame 创建的形状看起来正确,但与 pymunk 多边形的形状不匹配,这表明 pymunk 没有创建预期的形状。 那么如何按预期创建 pymunk 形状?

我认为问题可能是多边形不是封闭的和凸的。通常如果你想要一个长的 "wave" / "line" 它更容易使用线段形状而不是多边形。 Pymunk 多边形总是凸的。如果您作为坐标传入的内容尚未凸出且闭合,则将创建并使用凸包。

如果这不是问题,我认为如果您将多边形的长度减少到 10 或 100 会有助于理解问题,并截取一两张显示问题的屏幕截图并将其放在这里。