Erstellen Sie benutzerdefinierte MouseEvent.CLICK-Ereignis in AS3 (Parameter an eine Funktion)?
Diese Frage nicht beziehen sich nur auf das MouseEvent.KLICKEN Sie auf Ereignis-Typ, aber alle event-Typen, die bereits in AS3. Ich lese viel über benutzerdefinierte Ereignisse, aber bis jetzt konnte ich nicht herausfinden, wie zu tun, was ich tun möchte. Ich werde versuchen zu erklären, ich hoffe, Sie verstehen:
Hier ist eine illustration meiner situation:
for(var i:Number; i < 10; i++){
var someVar = i;
myClips[i].addEventListener(MouseEvent.CLICK, doSomething);
}
function doSomething(e:MouseEvent){ /* */ }
Aber ich möchte in der Lage sein, um pass someVar als parameter an doSomething. Also versuchte ich Folgendes:
for(var i:Number; i < 10; i++){
var someVar = i;
myClips[i].addEventListener(MouseEvent.CLICK, function(){
doSomething(someVar);
});
}
function doSomething(index){ trace(index); }
Diese Art von Werken aber nicht so, wie ich erwarten. Durch die Funktion Verschlüsse, wenn das MouseEvent.KLICKEN Sie auf Ereignisse tatsächlich feuerte die für Schleife ist schon vorbei und someVar hält den letzten Wert, die Anzahl 9 im Beispiel. Also jeder Klick in jeder Film-clip-call doSomething vorbei 9 als parameter. Und es ist nicht das, was ich will.
Dachte ich, dass das erstellen eines benutzerdefinierten Ereignisses sollte funktionieren, aber dann konnte ich nicht einen Weg finden, um ein benutzerdefiniertes Ereignis ausgelöst, wenn das MouseEvent.CLICK-Ereignis ausgelöst, und übergeben Sie die parameter. Nun weiß ich nicht, ob es die richtige Antwort.
Was soll ich tun und wie?
- Für jemand anderes suchen, in dieser habe ich noch eine schnelle code-Beispiel zum übergeben von Parametern an eine Funktion hier: rocketwidget.com/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ohne zu wissen, mehr über Ihre Anwendung, es scheint mehr wie sollten Sie mit dem target-Parameter übergeben, oder erweitern MouseEvent. Der ehemalige wäre mehr im Einklang mit der gängigen Praxis, wenn. So zum Beispiel, wenn Sie ausgesetzt sind eine integer public property auf Ihrem "clip" - Objekt (was auch immer es ist):
... und dann, in Ihrem Ereignis-listener, konnte Sie abrufen, dass Immobilien, die entweder das Ziel oder die Eigenschaft currentTarget des event (wahrscheinlich currentTarget, in deinem Fall):
Das sollte es tun! Viel Glück.
Sie wirklich brauchen, um erweitern die event-Klasse erstellen Sie Ihre eigene Veranstaltung mit zusätzlichen Parametern. Die Platzierung der Funktionen im addEventListener (anonyme Funktionen) ist ein Rezept für Speicherlecks, die ist nicht gut.
Werfen Sie einen Blick auf die folgenden.
wenn Sie ein neues Ereignis erstellen, wie
können Sie dann hören, dass Veranstaltung wie dieser
und innerhalb der Funktion 'listenerFunction" - Veranstaltung.parameterText wird, enthalten die parameter.
so, in Ihrem myClips Komponente, die Sie würde Feuer aus dem benutzerdefinierten event-und Listener für dieses Ereignis und nicht das Click-Ereignis.
Nutzen Sie die dynamische Funktion Bau in AS3.
Können Sie erreichen dies, indem Sie den handler aus der Funktion, die die variable Verschluss, wie diese:
Auch, wie, warum dies erstellt eine neue Schließung, möchten Sie vielleicht zu prüfen, die Erklärung in der akzeptierten Antwort auf eine ähnliche Frage.
Vielen Dank für diese nützliche Tipps, diese Technik besser zu verstehen als Klassen Erklärung.
für mich, ich habe gerade neu angefangen-code-Algorithmus, mit dieser Technik zu lösen, link Beziehung zwischen Timer-array und viewports array, und den status aktualisieren, indem Sie text ändern, in Ihnen Häufig durch die übergabe der ID ' s mit Timer-Ereignisse.
wie diese:
Ich sehe, Ihr Ziel ist nicht, tatsächlich zum erstellen einer benutzerdefinierten MouseEvent.KLICKEN Sie auf, sondern übergeben Sie einen parameter an die Funktion. Sie brauchen nicht zu kompliziert erstellen oder erweitern etwas. Es gibt eine einfache und Verschluss-ärger-freie Weise, es zu tun.
Nur Ihre Funktion wie folgt:
Diese Technik kann sich auf jeden AS3-event-Typ, den Sie verwenden können, addEventListener auf.
Und jetzt können Sie es wie folgt:
Den
doSomething(someVar)
kann verwendet werden, direkt aufaddEventListener()
, aber es ist besser, halten Sie es in einer Variablen zu, weil Sie in der Lage sein, um es zu entfernen später die gleiche Mode, die Sie Hinzugefügt:Den Häufig verwendeten
e.currentTarget.someCustomProperty
funktioniert für dynamische Objekte (z.B. MovieClip), aber lassen Sie Sie nach unten auf irgendetwas anderes (z.B. Sprite), Sie zu zwingen, ein ganzes bilden, benutzerdefinierte erweiterte Objekt/Ereignis für jeden Typ.Diese Lösung befasst sich mit jeden "hörbar" - Objekt und event. Und diese Antwort hat mehr details und Beispiele auf.