Come legare uno sprite di pyglet a un corpo di cimice in modo che se il corpo sta ruotando, anche lo sprite ruota?Come legare uno sprite di Pyglet con una forma Pymunk in modo che ruotino insieme?
risposta
Non c'è una sincronizzazione integrata, quindi è necessario farlo da soli per ciascun fotogramma. Ma non preoccuparti, è molto facile.
Se il tuo corpo è posizionato al centro della forma/delle forme e l'immagine ha le stesse dimensioni ci sono due cose che ti servono. Innanzitutto, imposta l'ancoraggio dell'immagine a metà della sua dimensione. Poi nel tuo metodo di aggiornamento fai un loop dei corpi che vuoi sincronizzare e imposta la posizione dello sprite sulla posizione del corpo e la rotazione dello sprite alla rotazione del corpo convertita in gradi. Potrebbe anche essere necessario ruotarlo di 180 gradi (nel caso in cui il modello sia ruotato) e/o invertire la rotazione.
Nel codice
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)
Per un esempio completo dare un'occhiata a questo esempio ho creato: https://github.com/viblo/pymunk/blob/master/examples/using_sprites_pyglet.py
(Im l'autore di pymunk)
caso in cui la '180' + davvero essere lì ? Ottengo un risultato migliore senza di esso. – Flimm
Solo se il modello è capovolto. Nell'esempio lo sprite è capovolto in relazione al triangolo, quindi ha bisogno di essere ruotato. Ma normalmente non ne hai bisogno. Mi rendo conto ora che sarebbe stato più chiaro senza di esso. – viblo