2012-04-15 15 views
0

Ich habe eine Reihe von Menüfenstern, die ich auf separaten Frames platziert habe (zum Beispiel das Hauptmenü auf Frame 1, das Optionsmenü auf Frame 2, das Kapitelmenü auf Frame 3, das Zeichenmenü) auf Rahmen 4, usw.). In jedem Menü gibt es eine Reihe von Textlinks (MovieClip-Instanzen). Wenn Sie darauf klicken, gelangen Sie zu einer anderen Menüseite. Einige dieser Links (gleiche Instanz) werden auf mehreren Seiten dupliziert, da sie dieselbe Funktion ausführen. Wenn Sie zum Beispiel auf die "backToMain" -Instanz klicken, wird unabhängig von der Seite, auf die Sie geklickt haben, wieder Frame 1 angezeigt, also das Hauptmenü.Erstellen von Menüverknüpfungen, die miteinander verbunden sind

Hat jemand eine Idee, wie ich das bauen könnte? Bis jetzt habe ich versucht, jedem einzelnen Link Listener hinzuzufügen, aber da sich viele Links auf anderen Frames als Frame 1 befinden, kann ich ihnen keine Listener hinzufügen, bis ich ActionScript befehle, zu diesem Frame zu blättern. Ich will es tun. Ich möchte die Zuhörer auf einmal für alle Links am Anfang global hinzufügen:

var linksArray:Array = [newStory, continueStory, options, characters, backToMain, backToOptions, ... etc]; 

for each (var link:MovieClip in linksArray) { 
link.addEventListener(MouseEvent.CLICK, onClick); 
} 

function onClick(e:MouseEvent):void 
      { 
       if (e.target.name == "newStoryLink") { 

        delegate.beginStory(); 

       } else if (e.target.name == "continueStory") { 

        // do something else 
       } else if (e.target.name == "chapters") { 

        // do something else 
       } else if (e.target.name == "options") { 

        // do something else 
       } 

Der obige Code funktioniert nicht, weil, wie erwähnt ich nicht Hörern Instanzen hinzufügen können, die auf anderen Frames bestehen. Der Code sagt grundsätzlich, was zu tun ist, wenn auf einen Link geklickt wird, unabhängig davon, auf welchem ​​Frame ich bin oder auf welche Instanz des Links geklickt wurde. Danke.

+0

Also, was ist das Problem? – Torious

+0

Bitte lesen Sie die Frage, das Problem ist, dass der Code nicht funktioniert. Ich kann keine Listener zu Instanzen in anderen Frames hinzufügen. – Windbrand

+0

Sie könnten versuchen, Ihren Ereignis-Listener zu 'stage' hinzuzufügen; alle "CLICK" -Ereignisse * sollten * schließlich dazu führen, denke ich. Verwenden Sie dann etwas wie den 'onClick'-Handler, den Sie oben beschreiben. – Torious

Antwort

0

Folgendes habe ich mit den obigen Kommentaren gemeint. Ich habe versucht, nur die folgenden in einem leeren Flash-Datei:

  • Rahmen 1: leer Keyframe/einige Inhalte
  • Rahmen 10: Keyframe mit einer Schaltfläche namens "someButton"

  • Rahmen 1: Mit dem folgenden Code:

     import flash.events.MouseEvent; 
    
         stage.addEventListener(MouseEvent.CLICK, onClick); 
    
         function onClick(e:MouseEvent):void { 
    
          if (e.target.name == "someButton") 
           trace("Button clicked"); 
    
         } 
    

das ist es. Wenn ich auf die Schaltfläche auf Bild 10 klicke, erscheint die Meldung.

Dies funktioniert, weil Flash ein Bubbling-Ereignismodell verwendet, was bedeutet, dass die meisten (beliebigen?) Ereignisse auf Anzeigeobjekten (wie Schaltflächen) auch an ihre Eltern und an ihre Eltern usw. weitergegeben werden CLICK Ereignis von der Schaltfläche kommt in der Phase an und wird vom onClick-Ereignishandler verarbeitet. Dort prüfen wir, ob das Objekt von namesomeButton ist.

Wo ich die trace setzen, würden Sie einfach Ihre Logik für, wenn der Menüpunkt angeklickt wird. Ist das die Funktionalität, nach der Sie gesucht haben?

Beachten Sie, dass Sie nicht mit stage Eigenschaften wie buttonMode, mouseChildren usw. geigen müssen. Verwenden Sie einfach den obigen Code als Ausgangspunkt.