2009-06-06 14 views
1

Ich lade ein Bild und füge es dem MC someMC hinzu. Wenn "etwas" wahr ist, erhält die someVariable die someMC scaleX-Nummer. Sagen wir es 0,82.Globales Variablenproblem

Was ich brauche, ist diese Nummer in den s.value in meinem Slider-Objekt zu bekommen. Da ich den Slider-Wert haben soll, wo meine Bildskalierung ist.

Dies funktioniert natürlich nicht wegen der Einschränkungen des Variablenbereichs.

Ich habe versucht, die Variable an der Spitze des Codes wie folgt einzustellen: var someVariable: Number; aber das hat auch nicht funktioniert.

Hier ist der Code:

function completeHandler(event:Event):void{ 
    if (something) { 
      var someVariable:Number = this.someMC.scaleX; 
    } 
} 


var s:Slider = new Slider(); 
s.maximum = 500; 
s.minimum = 10; 
s.value = someVariable; 

Irgendwelche Gedanken?


aktualisieren
ich für eine Lösung freu ohne Paket und Klasse zu verwenden, da ich noch mit AS3 nicht so stabil bin.

aktualisieren 2
I've uploaded all the code to Pastebin. Take a look ;)

+0

Wenn ich in einem MovieClip bin und das global.x importiert habe, müsste ich es trotzdem in den Movieclip importieren? –

Antwort

1

Die this in Ihrem completeHandler ist nicht das Dokument. Probieren Sie einfach MC.scaleX aus, und vorausgesetzt, Sie haben es auf Ihrer Hauptzeitleiste oder wo auch immer deklariert, sollte es darauf zugreifen können. Die scaleX-Eigenschaft reicht auch nur von 0 bis 1, also wenn dein Slider 10: 500 ist - das wird nicht funktionieren. Ich stelle * 100 für Sie ein, aber tun Sie, was immer Sie brauchen, um die Skala auf das zu bringen, was Sie vorhatten.

Außerdem müssen Sie den Slider-Wert explizit im Handler festlegen, anstatt nur die Variable zu ändern. Variablen werden nicht wie in AS3 übergeben.

function completeHandler(event:Event):void{ 
     if (something) { 
        var someVariable:Number = someMC.scaleX; 
        s.value = someVariable * 100; 
     } 
} 


var s:Slider = new Slider(); 
s.maximum = 500; 
s.minimum = 10; 
1

Das Problem ist Ihre Handler-Funktion, wo Ihre Slider ist keine Informationen haben. Die s Variable, die Sie dort haben, ist auch nicht wirklich global, es ist lokal innerhalb Ihrer Klasse oder MovieClip. Wenn der Handler mit Code außerhalb des Movieclips ausgeführt wird, gibt es keinen this Kontext, es sei denn, Sie verwenden eine Methode aus einer Klasse.

Der beste Weg, an den ich denken kann, ist eine Klasse zu verwenden. Erstellen Sie s als eine Membervariable für die Klasse, dann kann Ihr Handler mit this referenziert werden. Etwas wie der folgende Code sollte es tun. Stellen Sie sicher, dass Sie es auch mit einem MovieClip der Bibliothek verknüpfen.

package { 
    import flash.display.MovieClip; 

    class MyMovieClip extends MovieClip { 
     public var s:Slider; 

     public function MyMovieClip { 
      var s:Slider = new Slider(); 
      s.maximum = 500; 
      s.minimum = 10; 

     } 

     function completeHandler(event:Event):void{ 
      if (something) { 
       var someVariable:Number = this.someMC.scaleX; 
       this.s.value = someVariable 
      } 
     } 
    } 
} 
+0

kekoav: Siehe die Updates;) –

0

Nun zufällig sehe ich Ihre Frage erneut. (Erinnert mich?)

Nun stattdessen das Bild aus einer anderen Domäne der Skalierung können Sie den Loader skalieren, so wird es noch kein Cross-Domain-Sicherheitsproblem

ein funktionstüchtiges Beispiel hier: http://matrixoft.infunity.com/agent/calvin/stackoverflow/getScale.swf

Quellcode hier: http://matrixoft.infunity.com/agent/calvin/stackoverflow/getScale.rar

[ps Wenn Sie den kommentierten Code in der buttonAction-Ebene sehen, schlägt der kommentierte Code fehl, weil er versucht, die Skalierung eines Bilds aus einer anderen Domäne zu manipulieren. Der Code nach kommentiertem Code manipuliert den Maßstab des Loader, nicht Bild]

+0

Ich kann es nicht funktionieren. Können Sie mir meinen Code zeigen? http://pastebin.com/m7c37b3cf –

+0

vielleicht versuchen Sie, Zeile 52 von this.container.addChild zu ändern (event.target.content); zu this.container.addChild (event.target); , so dass Sie den Loader-Loader anstelle des Loader-Inhalts ändern, genau wie in meinem Beispiel – Unreality

+0

, also funktioniert es? – Unreality