Wie kann ich Versand Sie ein benutzerdefiniertes Ereignis aus einer actionscript-3-Klasse und hören Sie es im document root?
Ich baute eine benutzerdefinierte event-dispatcher übergibt Variablen. Ich versende die Veranstaltung und dann versuche ich zu hören, für den Fall in meinem document root, aber ich habe nie das Ereignis erhalten. Wie kann ich die Blase, die Veranstaltung bis zu meinem document-Klasse?
addEventListener(CustomVarEvent.pinClicked, pinClickedHandler);
function pinClickedHandler(e:CustomVarEvent) {
trace("main says " + e.arg[0] + " clicked");//access arguments array
}
package zoomify.viewer
{
import com.maps.CustomVarEvent;
protected function hotspotClickHandler(event:MouseEvent):void {
var hotspotData:Hotspot = hotspotsMap[event.currentTarget] as Hotspot;
trace(hotspotData._name + " was clicked");
/*if(hotspotData) {
navigateToURL(new URLRequest(hotspotData.url), hotspotData.urlTarget);
}*/
dispatchEvent(new CustomVarEvent("pinClicked",true,false,hotspotData._name));
}
}
package com.maps
{
//Import class
import flash.events.Event;
//CustomVarEvent
public class CustomVarEvent extends Event {
public static const pinClicked:String = "pinClicked";
//Properties
public var arg:*;
//Constructor
public function CustomVarEvent(type:String, ... a:*) {
var bubbles:Boolean = true;
var cancelable:Boolean = false;
super(type, bubbles, cancelable);
arg = a;
}
//Override clone
override public function clone():Event{
return new CustomVarEvent(type, arg);
};
}
}
Den pinClicked Ereignis, das ausgelöst wird, ist zwei Ebenen tief geschachtelte Klassen. Ich fügen Sie eine Instanz der Klasse ZoomifyViewer auf die Bühne. ZoomifyViewer fügt und Instanz ZoomGrid auf die Bühne und ZoomGrid das Ereignis auslöst.
Wenn ich das gleiche Ereignis-listener und-handler-Funktion direkt in meine ZoomGrid-Klasse (gleiche Klasse, die das Ereignis ausgelöst wurde), dann die listener und eine Ereignisprozedur richtig funktionieren. Allerdings, wenn der listener und-handler werden in einer übergeordneten Klasse oder auf der Bühne, habe ich keine Antwort erhalten.
Ist ein dispatcher notwendig, um die Blase zu Blase?
Außerdem sind diese beiden Zeilen funktionell identisch auf der Grundlage der ständigen pinClicked definiert ist, in meinem CustomVarEvent?
dispatchEvent(new CustomVarEvent(CustomVarEvent.pinClicked, hotspotData._name));
dispatchEvent(new CustomVarEvent("pinClicked", hotspotData._name));
InformationsquelleAutor Bryan | 2009-04-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Veranstaltung kann nur sprudeln durch die Anzeigeliste, wenn das Objekt, das das Ereignis wird ausgelöst, ein DisplayObject (oder ein Vorfahre von DisplayObject ist, wie ein Sprite-oder MovieClip), so dass es sein kann, in die display list UND es wird der Anzeigeliste Hinzugefügt in der Zeit des event dispatch.
Den code, den Sie geschrieben haben, nicht die Zeile, die das Ereignis als Teil einer Klasse überhaupt, nur eine Funktion in einem Paket, so bin ich nicht sicher, wo Sie beabsichtigen, es brodelt.
Eine schnelle Lösung für Sie wäre einfach zu haben, das gleiche Objekt, auf das geklickt wurde das Ereignis wird ausgelöst, aus der es, cuz, da es angeklickt wurde, ist es offensichtlich ein Anzeige-Objekt, das auf der Bühne, die auf unsere zwei Bestimmungen zum brodeln.
event.currentTarget ist alles, was Objekt war, das auf das MouseEvent, ein Ereignis.Ziel ist, jedes Objekt, das MouseEvent ausgelöst. So oder so, in diesem Fall ist es wahrscheinlich Ihren hotspot. Aber seit dem Ereignis.Ziel war es, auf die geklickt, ich weiß zu 100%, dass es ein display-Objekt auf der Bühne, so wählte ich das 🙂
Danke Bryan. Denn diese Antwort ist so klar, das habe ich überprüft heraus einige der anderen Antworten, die auf Ihr Profil. Ich Lerne viel von Ihnen.
InformationsquelleAutor Bryan Grezeszak
Veranstaltungen Blase bis die Anzeige der Liste. Ich kann nicht sagen, aus deinem code-Beispiel, welches Objekt Sie sind, das das Ereignis auslöst, nur, dass Sie haben eine Methode auf einer Klasse zu tun. Hat eine Instanz der Klasse wurde Hinzugefügt, um die Anzeige der Liste?
InformationsquelleAutor Stiggler
Sprudelt nur funktioniert, wenn das Objekt, das das Ereignis auslöst, ist auf der displaylist. Das ist jeden Enkel von der Bühne.
Dass ist richtig, dein problem ist, aber ich kann nicht sehen vom code-snippet, wenn Sie hinzufügen, Versand Klasse, um die displaylist.
Auch, es sieht nicht wie du einen custom EventDispatcher, aber ein benutzerdefiniertes Ereignis aus. Aber ich könnte falsch sein (kann nicht sehen, alle Ihre code).
InformationsquelleAutor Jacob Poul Richardt
Um zu hören das benutzerdefinierte Ereignis sollten Sie über einen gültigen Verweis auf die dispatcher in Ihrem Dokument-Klasse.
yourDispatcher.addEventListener(CustomVarEvent.pinClicked, pinClickedHandler);
Wo yourDispatcher ist die Klasse Versand das benutzerdefinierte Ereignis.
Ja, es ist. In der Tat ist es sehr einfach. Ich benutze es die ganze Zeit. Das ist einer der größten Vorteile der Vererbung, können Sie Funktionen hinzufügen, ohne zu verlieren jede.
Ich habe etwas lernen...: )
Schande über mich !!! :' |
InformationsquelleAutor OXMO456