2012-10-24 10 views

risposta

4

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)

+0

caso in cui la '180' + davvero essere lì ? Ottengo un risultato migliore senza di esso. – Flimm

+0

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

Problemi correlati