2013-04-03 8 views
10

Ich möchte, dass sich dieses Objekt um seine Mitte dreht und nicht um die obere linke Ecke. Der Code sieht wie folgt aus:AS3 Ein Objekt um seinen Mittelpunkt drehen

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

Also, wenn ich die linke Taste drücken, das Auto nach links abbiegt, aber wie es jetzt ist es springt ein wenig, weil seine um die obere Ecke drehen.

Dank

Antwort

7

Der einfachste Weg, dies zu erreichen, ist Ihren Auto Sprite/Movieclip auf einen anderen Sprit hinzuzufügen, wobei die x und die y-Koordinaten Eigenschaften der Hälfte der Breite und Höhe sind. Wenn das Auto in Adobe Flash gezeichnet wird, können Sie es auch nach oben links ziehen, so dass der Mittelpunkt in der Mitte ist.

20

Im Folgenden wird um das Zentrum rotieren:

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

es das Zentrum des Objekts zu 0,0 übersetzt dann drehen und es dann zurück zu übersetzen.

+0

vielen dank! Es klappt !!! –

+0

Es scheint, dass es einen sehr kleinen Fehler gibt, der sich bei jedem Spin anhäuft und mein rotierendes Rad wird nach und nach bewegt. Mein Bild ist perfekt zentriert. Sehr seltsam –

+1

@DeyanVitanov versuchen, die letzte Zeile zu entfernen 'object.rotation = Math.round (object.rotation);' sehen was passiert. –

Verwandte Themen