Как связать спрайт Pyglet с формой Pymunk, чтобы они вращались вместе?

Как связать спрайт pyglet с телом pymunk, чтобы, если тело вращается, спрайт также вращался?


person user1760456    schedule 24.10.2012    source источник


Ответы (1)


Встроенной синхронизации нет, поэтому вам придется делать это самостоятельно для каждого кадра. Но не волнуйтесь, это очень легко.

Если ваше тело расположено посередине фигуры/фигур, а изображение такого же размера, вам нужны две вещи. Во-первых, установите якорь изображения на половину его размера. Затем в вашем методе обновления вы зацикливаете тела, которые хотите синхронизировать, и устанавливаете положение спрайта в положение тела, а вращение спрайта - в вращение тела, преобразованное в градусы. Вам также может понадобиться повернуть его на 180 градусов (если ваша модель перевернута) и/или инвертировать вращение.

В коде

img = pyglet.image.load('img.png')
img.anchor_x = img.width/2
img.anchor_y = img.height/2

sprite = pyglet.sprite.Sprite(img)
sprite.body = body 

def update(dt):

    sprite.rotation = math.degrees(-sprite.body.angle)
    sprite.set_position(sprite.body.position.x, sprite.body.position.y)

Для полного примера взгляните на этот пример, который я создал: https://github.com/viblo/pymunk/blob/master/examples/using_sprites_pyglet.py

(Я автор pymunk)

person viblo    schedule 27.10.2012
comment
Должен ли + 180 действительно быть там? Я получаю лучший результат без него. - person Flimm; 29.01.2013
comment
Только если ваша модель перевернута. В примере спрайт перевернут по отношению к треугольнику, поэтому его нужно вращать. Но обычно вам это не нужно. Теперь я понимаю, что без него было бы понятнее. - person viblo; 09.05.2017