Создание ландшафта (фигуры) в Pymunk с использованием Opennoise - PullRequest
1 голос
/ 11 января 2020

Я пытался создать игру в пимунке с 2D ландшафтом, используя Opennoise. Координаты местности:

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, чтобы отобразить все, а верхняя часть окна - у = 0, а нижняя - у = 800.

Затем я создаю тело pymunk stati c с многоугольной формой и создаю форму пигмея для отображения ландшафта следующим образом: (pm = pymunk)

 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)

Созданная форма by pygame, который выглядит правильно, не совпадает с формой многоугольника pymunk, который указывает, что pymunk не создает предполагаемую форму. Так как же создать форму пимунка, как задумано?

1 Ответ

0 голосов
/ 12 января 2020

Я думаю, что проблема может заключаться в том, что многоугольник не является замкнутым и выпуклым. Обычно, если вам нужна длинная «волна» / «линия», проще использовать фигуры сегментов вместо полигонов. Полигоны Pymunk всегда будут выпуклыми. Если то, что вы передаете в качестве координат, еще не является выпуклым и закрытым, то будет создан и использован выпуклый корпус.

ЕСЛИ это не проблема, я думаю, что это поможет понять проблему, если вы уменьшите длину от многоугольника до 10 или 100, и сделайте один или два снимка экрана, на которых показана проблема, и поместите их здесь.

...