2010-12-28 10 views
0

Ich habe bereits zwei TLF Textfelder auf meiner Hauptbühne platziert. Im Eigenschafteninspektorfenster gebe ich die Instanznamen: "txt1" und "txt2".Flash benennt automatisch Objekte auf der Bühne "instance #"

Ich versuche, ein einzelnes MouseUp-Ereignis zu haben und herauszufinden, in welchem ​​Textfeld es aufgetreten ist.

Meine Dokumentenklasse hat die folgenden Code:

package { 
import flash.display.Sprite; 
import flash.events.KeyboardEvent; 

public class SingleEvent extends Sprite{ 

    public function SingleEvent() { 
     // constructor code 
     root.addEventListener(KeyboardEvent.KEY_UP, textChanged,false,0,true); 
    } 

    private function textChanged(e:KeyboardEvent){ 
     trace(e.target.name); 
     trace(" " + e.target); 
     switch(e.target){ 
      case txt1: 
       trace("txt1 is active"); 
       break; 
      case txt2: 
       trace("txt2 is active"); 
       break; 
      default: 
       break; 
     } 
    } 

    } 
} 

Beispiel Ausgabe lautet:

instance15 
    [object Sprite] 
instance21 
    [object Sprite] 

Da die Objekte bereits auf der Bühne sind, ich bin nicht sicher, wie Flash, um sie zu erkennen als "txt1" und "txt2" anstelle von "instance #". Ich habe versucht, die .name-Eigenschaft zu setzen, aber es hatte keine Wirkung.

In den Veröffentlichungseinstellungen habe ich "Instanzen Instanzen automatisch deklarieren" aktiviert.

Ist es auch möglich, ein einzelnes Änderungsereignis für mehrere Schiebereglerkomponenten zu haben? Im Folgenden wird nie ausgelöst:

root.addEventListener(SliderEvent.CHANGE, sliderChanged,false,0,true); 

Vielen Dank für alle Tipps

+0

Welche Version von Flash verwenden Sie? Nicht, dass es wichtig wäre, aber Ihr Code funktioniert vollkommen in Ordnung für mich. – sberry

+0

Ahhh ... Ich nehme es zurück. Ich sehe, Sie verwenden CS5, hat den TLF-Faktor in Ihrer Frage nicht bemerkt. Wenn ich von Dynamic zu TLF wechsele, bekomme ich das gleiche Verhalten wie du. – sberry

+0

Yep CS5. Das ist seltsam, es funktioniert für den dynamischen Text. Ich muss mich vielleicht ändern und diese Art von Text verwenden. Allerdings habe ich TLF verwendet, weil es schärfer aussieht. – meowMIX3R

Antwort

0

Es scheint, dass der Flash Player die TLFTextFields durch die Zeit nicht initialisiert der Konstruktor aufgerufen wird. Versuchen Sie folgendes:

package { 

    import flash.display.MovieClip; 
    import flash.utils.describeType; 
    import flash.events.Event; 

    public class TestTLF extends MovieClip { 

     private function onEnterFrame (ev:Event) : void { 
      removeEventListener (Event.ENTER_FRAME, onEnterFrame); 
      for (var i:int = 0; i < numChildren; i++) { 
       var obj:Object = getChildAt(i); 
       trace (obj.name + ":"+describeType(obj)); 
      } 
     } 

     public function TestTLF() { 
      addEventListener (Event.ENTER_FRAME, onEnterFrame); 
     } 
    } 

} 

Sie werden feststellen, dass zusätzlich zu den auf mysteriöse Weise erstellt zusätzliche Objekte „__id #“ und „Beispiel #“, die beide Ihre TFLTextFields werden erkannt.

Außerdem "blubbern" Ihre Slider-Komponenten offensichtlich nicht ihre SliderEvents, was bedeutet, dass sie niemals das Root-Objekt erreichen. Sie können jedoch eine Handler-Funktion beliebig oft zuweisen, sodass Sie jedem Schieberegler Listener hinzufügen können, die alle auf die gleiche sliderChanged-Funktion verweisen.

Verwandte Themen