2017-02-17 2 views
1

Ich habe vor kurzem mit dem Programmieren in Actionscript 3 begonnen, und ich habe ein Problem beim Skalieren eines MovieClip festgestellt.Actionscript 3 Skalierung

{ 
    private var valGrandX:Number; 
    private var valGrandY:Number; 
    public function Bonhomme_Fil() 
    { 
     valGrandX = this.scaleX; 
     valGrandY = this.scaleY; 

     this.addEventListener(MouseEvent.ROLL_OVER, big); 
     this.addEventListener(MouseEvent.ROLL_OUT, small); 
    } 
    private function big(event:MouseEvent):void 
    { 
     this.scaleX *= 1.5; 
     this.scaleY *= 1.5; 
    } 
    private function small(event:MouseEvent):void 
    { 
     this.scaleX = valGrandX; 
     this.scaleY = valGrandY; 
    } 
} 

Mein Ziel ist der Clip zu haben, größer werden, wenn der Benutzer die Maus darüber bewegt, und zurück zu seiner normalen Größe, wenn er außerhalb davon schwebt. Was passiert, ist, dass wenn es auf eine größere Größe skaliert wird, es sich nach unten und nach rechts bewegt und am Ende hin und her flimmert.

Antwort

1

Wenn Sie einen MovieClip entwerfen, wird dessen Mittelpunkt mit einem kleinen (+) markiert. Dieser Punkt ist (0,0) vom MovieClip selbst und (x, y) vom MovieClip in seinen Elternkoordinaten. Wenn Sie diesen MovieClip mit AS3-Befehlen skalieren/drehen, skaliert/dreht er sich um diesen Punkt. Sie müssen den Inhalt des MovieClips so umgestalten, dass er gleichmäßig um seine (0,0) platziert wird, dann haben Sie den Effekt "Zoomen".

Sie können auch eine transparente Schaltfläche hinzufügen (mit 4. Frame - es ist nur der Trefferbereich), wenn Ihr MovieClip "Löcher" oder Inhaltsinkonsistenzen für die Maus aufweist.

1

Verwenden Sie MouseEvent.MOUSE_OVER und MouseEvent.MOUSE_OUT.

prüfen what is the difference between roll over and mouse over?

Oder setzen Sie Code wie folgt:

private var valGrandX:Number; 
private var valGrandY:Number; 
public function Bonhomme_Fil() 
{ 
    valGrandX = this.scaleX; 
    valGrandY = this.scaleY; 

    addEventListener(MouseEvent.ROLL_OVER, big); 
} 
private function big(event:MouseEvent):void 
{ 
    //this.scaleX *= 1.5; 
    //this.scaleY *= 1.5; 
    this.scaleX = 1.5; 
    this.scaleY = 1.5; 

    removeEventListener(MouseEvent.ROLL_OVER, big); 
    addEventListener(MouseEvent.ROLL_OUT, small); 
} 
private function small(event:MouseEvent):void 
{ 
    this.scaleX = valGrandX; 
    this.scaleY = valGrandY; 

    addEventListener(MouseEvent.ROLL_OVER, big); 
    removeEventListener(MouseEvent.ROLL_OUT, small); 
} 
+0

Hallo zu verweisen, ich Ich habe es versucht und es hat nicht funktioniert. Es scheint, dass sich aus irgendeinem Grund die X- und Y-Koordinaten zusätzlich zu der Skala ändern, die von der oberen linken Kordel ausgeht. – tomtom123456

+0

Siehe bearbeitete Antwort. Dann ist dein Problem 'this.scaleY * = 1.5' Entferne das Multiplikatorzeichen. – Nemi

1

Ich denke, der Grund ist, dass der x, y-Wert nicht geändert hat, versuchen Sie bitte this post

+0

Hallo, ich habe das ausprobiert, aber aus irgendeinem Grund ändern sich die Werte von x und y, obwohl es nicht im AS-Skript ist ... – tomtom123456