2013-04-03 15 views
10

Chcę, aby ten obiekt obracał się wokół jego środka zamiast lewego górnego rogu. Kod wygląda następująco:AS3 Obróć obiekt wokół jego punktu środkowego.

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

więc kiedy naciśnij lewy klawisz, samochód skręca w lewo, ale jak jest teraz to podskakuje trochę, ponieważ jej obracanie się wokół górnego rogu.

Dzięki

Odpowiedz

7

Najprostszym sposobem osiągnięcia tego celu jest dodanie swój samochód sprite/MovieClip na innej ikonki, gdzie X i Y są współrzędne pół właściwości width i height. Jeśli samochód jest narysowany w lampie błyskowej, możesz również przeciągnąć go w lewy górny róg, tak aby środkowy punkt znajdował się pośrodku.

20

Następujące będzie obracać się wokół centrum:

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); 
} 

To przekłada się na środku obiektu do 0,0, a następnie obrócić go, a następnie przełożyć je do tyłu.

+0

dziękuję bardzo! to działa !!! –

+0

Wygląda na to, że przy każdym obrocie gromadzi się bardzo mały błąd, a moje obrotowe koło powoli się porusza. Mój obraz jest idealnie wyśrodkowany. Bardzo dziwny –

+1

@DeyanVitanov spróbuj usunąć ostatni wiersz 'object.rotation = Math.round (object.rotation);' zobacz, co się stanie. –

Powiązane problemy