2013-04-03 5 views
10

Voglio che questo oggetto ruoti attorno al suo centro invece che nell'angolo in alto a sinistra. Il codice è simile al seguente:AS3 Ruota un oggetto attorno al suo punto centrale

 switch (event.keyCode) 
     { 
      case 37: 
      car.rotation = -90; 
       car.x -= 5; 
       break; 

Così, quando si preme il tasto sinistro, la macchina gira a sinistra, ma come è ora salta un po 'perché la sua rotazione intorno all'angolo superiore.

Grazie

risposta

7

Il modo più semplice per ottenere questo risultato è quello di aggiungere la macchina sprite/movieclip su un'altra sprite, dove x ed y sono le coordinate metà delle proprietà di larghezza e altezza. Se l'auto è disegnata in Adobe Flash, puoi anche trascinarla in alto a sinistra, in modo che il punto centrale si trovi nel mezzo.

20

Di seguito ruoterà intorno al centro:

public function rotateAroundCenter(object:DisplayObject, angleDegrees:Number):void { 
    if (object.rotation == angleDegrees) { 
     return; 
    } 

    var matrix:Matrix = object.transform.matrix; 
    var rect:Rectangle = object.getBounds(object.parent); 

    matrix.translate(-(rect.left + (rect.width/2)), -(rect.top + (rect.height/2))); 
    matrix.rotate((angleDegrees/180) * Math.PI); 
    matrix.translate(rect.left + (rect.width/2), rect.top + (rect.height/2)); 
    object.transform.matrix = matrix; 

    object.rotation = Math.round(object.rotation); 
} 

Traduce il centro dell'oggetto da 0,0 quindi ruotarlo e poi tradurlo indietro.

+0

grazie mille! Funziona !!! –

+0

Sembra che ci sia un errore molto piccolo che si accumula ad ogni giro e fa muovere la ruota rotante a poco a poco. La mia immagine è perfettamente centrata. Molto strano –

+1

@DeyanVitanov prova a rimuovere l'ultima riga 'object.rotation = Math.round (object.rotation);' guarda cosa succede. –