| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| flash your mind Registriert seit: Jun 2007
Beiträge: 37
| Event einer Klasse an Child-Klasse
Hallo, wie ich in AS 3.0 ein Event mit Parametern von der GrandChild-Klasse an die Parent-Klasse übergebe, habe ich nunmehr herausgefunden (Custom event mit bubbling). Wie kann ich allerdings ein Ereignis an eine X-beliebigen Klasse (zum Beispiel Child-Klasse) übergeben? In meinem Fall instanziere ich in meiner Main.as (Document-Class) eine KeyListener.as (löst KeyboardEvent aus) und eine Display.as. Innerhalb der Display.as werden wiederum zum Beispiel ShowDisplay1.as und ShowDisplay2.as instanziert. Nun möchte ich, dass ShowDisplay1.as und ShowDisplay2.as ebenfalls auf das Event hören. Dabei wäre ersteinmal meine prinzipielle Frage, lässt sich ein Event (am Ende auch mit Parametern) überhaupt in die Richtung weitergeben? Schon einmal Danke /salzblog PS: Einer meiner Versuche war, die KeyListener-Klasse zusätzlich jeweils in den SchowDisplay-Klassen zu instanzieren. In dem Fall wird mit addEventListener zwar das Event erkannt, aber dieses hat sich mit jedem weiteren Ereignis aufsummiert. Da ich das Event später auch in anderen Child-Klassen verwenden möchte, kann ich es nicht alleine von den ShowDisplay-Klassen "aufsteigen" lassen. Geändert von salzblog (07-09-2007 um 13:49 Uhr) |
| | |
| | #2 (permalink) |
| Perverted Hermit Registriert seit: Mar 2004 Ort: Delmenhorst
Beiträge: 11.856
|
__________________ github: https://github.com/floriansalihovic/L18nExample <florian xmlns:speaker="www.beyondtellerrand.com/ffk11/speakers_sessions" xmlns:trainer="http://www.beyondtellerrand.com/ffk11/workshops" /> and @ g+ |
| | |
| | #4 (permalink) |
| public void Registriert seit: Jun 2001 Ort: Lusaka
Beiträge: 215
|
Ich weiß nicht recht, wo dein Problem ist. Du musst jedes Objekt (bzw. eine Methode des Objekts), dass auf Ereignisse reagieren soll, irgendwo als Listener anmelden. Entweder kannst Du ShowDisplay1 usw. direkt als Listener für KeyEvents registrieren. Oder, da Du anscheinend schon einen zentralen Listener hast (KeyListener), mach daraus einen EventDispatcher (und schreib ggf. eigene Events, wenn normale KeyEvents für deine Zwecke zu allgemein sind) und registriere ShowDisplay1 usw. dort als EventListener. Ein EventDispatcher ist ein Objekt, dass selbst Events auslöst (dispatchEvent()) und an dem sich andere per addEventListener() anmelden können. Oder entgeht mir da gerade etwas grundsätzliches?
__________________ Isn't it idiotic? Geändert von Moe (07-09-2007 um 14:50 Uhr) |
| | |
| | #5 (permalink) |
| flash your mind Registriert seit: Jun 2007
Beiträge: 37
|
Hallo zusammen, wie ein EventListener aufgebaut ist addEventListener und dispatchListener eingerichtet werden, habe ich (glaube ich) verstanden. Code: dispatchEvent(new KeyEvent(KeyEvent.KEYBOARD_EVENT, true, false, "previous", keyDownCode)); Code: var keyListener:KeyListener = new KeyListener(); this.addChild(keyListener); addEventListener(KeyEvent.KEYBOARD_EVENT, addScenario, true); Vielleicht ist es ja wirklich ganz einfach und ich stehe einfach nur auf dem Schlauch. Für eure Hilfe wäre ich sehr dankbar. ZUm (hoffentlich) besseren Verständnis nochmal den Beispiel-Code: Prototyp.as (Dokumentenklasse) PHP-Code: PHP-Code: PHP-Code: Schon einmal vielen Dank /salzblog PS: Bei Bedarf kann ich die KeyListener-Klasse noch nachreichen... traces in Prototyp.as und Screen.as zum Testen funktionierten immer einwandfrei Geändert von salzblog (11-09-2007 um 01:51 Uhr) |
| | |
| | #6 (permalink) |
| flash your mind Registriert seit: Jun 2007
Beiträge: 37
| Lösung des Problems
Hallo, ich habe noch etwas "experimentiert" und herausgefunden, dass beim Wechsel von Scenario1 zu Scenario2 (Löschen der Instanz Scenario1, instanzieren von Scenario2) der addEventListener von Scenario1 nicht automatisch entfernt wird und im Hintergrund weiterläuft. So konnte ich zwar die Ereignisse triggern, jedoch haben diese sich mit zunehmenden Wechsel zwischen den Scenarien aufsummiert und zum Programmabsturz geführt. Mit einem zustätzlichen addEventListener(Event.REMOVE, ...) wird der keyListener sauber entfernt und die Tastenereignisse über alle Ebenen hinweg sauber getriggert. Zudem lasse ich die Ereignisse aus den Scenarien nicht mehr aufsteigen (bubbled = false); PHP-Code: /salzblog Geändert von salzblog (12-09-2007 um 14:18 Uhr) Grund: zusätzliche Infos |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |