我一直在尝试使用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 显示所有内容,窗口顶部在 y = 0,底部在 y = 800。
然后,我创建一个具有多边形形状的 pymunk 静态体,并创建一个 pygame 形状来显示地形,如下所示: (下午 = 皮蒙克(
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 形状呢?
我认为问题可能是多边形不是闭合和凸的。通常,如果您想要长"波浪"/"线",则更容易使用线段形状而不是多边形。皮蒙克多边形将始终是凸的。如果作为坐标传入的内容尚未凸起且闭合,则将创建并使用凸包。
如果这不是问题,我认为如果您将多边形的长度减少到 10 或 100,并截取一两张显示问题的屏幕截图并将其放在这里,这将有助于理解问题。