| |||||||
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) |
| klein und fein:) Registriert seit: Nov 2009 Ort: Köln
Beiträge: 24
| [AS3] Problem mir eigenen Event für Klasse
Hallo, ich habe folgendes Problem: Ich habe in meiner .fla Datei ein einziges Schlüsselbild, wo mein AS3 Code drin steht. Ich habe mehrere eigene Klassen, in seperaten Dateien die ich da importiere. Dies funktioniert auch soweit. Nur habe ich ein Problem mit eigenen Events die Klassenfunktionen aufrufen sollen. Die eigenen Events habe ich in einer eigenen Klasse Events definiert (nach dieser Anleitung: AS3 – Eigene Events verwenden // Thomas Aull // Grafik und Webdesign // Grafikdesign, Webdesign, Screendesign, Flash, ActionScript, (X)HTML, CSS) Mein EventListener wird im Konstruktor der Klasse Test dem Objekt hinzugefügt: this.addEventListener(Events.START, startByEvent); Event.START habe ich in der Klasse Events definiert startByEvent ist eine Methode dieser Klasse, die aufgerufen werden soll, wenn das Event eintrifft. (Funktionskopf: public function startByEvent(e:Events)) wenn ich jetzt in dem Schlüsselbild meiner .fla Datei ein Objekt der Klasse Test mit dem namen myTest instanziiere und danach dispatchEvent(new Events(Events.START, null)); aufrufe, macht er nichts. Schreibe ich addEventListener(Events.START, myTest.startByEvent); direkt hinter die Instanziierung, dann funktioniert es bedingt. Was mach ich falsch? Geändert von julianeS.85 (05-01-2010 um 12:09 Uhr) |
| | |
| | #2 (permalink) |
| Neuer User Registriert seit: Oct 2007
Beiträge: 434
|
Hi! Wenn in der Klasse this.addEventListener steht, muss auch diese Klasse das Event Dispatchen. Sprich in deinem fall myTest.dispatchEvent(bla blub). Allerdings scheint mir die ganze Konstruktion etwas widersinnig, da du ja in deinem Konstrukt auch einfach die startByEvent Funktion direkt aufrufen kannst. Wenn Parent objekte beim Child was auslösen sollen macht man das in der Regel über public functions. Events benutzt man hingegen um als Child funktionen in der Parentklasse auszulösen. Hoffe das ist so verständlich. |
| | |
| | #3 (permalink) | |
| klein und fein:) Registriert seit: Nov 2009 Ort: Köln
Beiträge: 24
| Zitat:
Muss ich da der Funktion die Referenz des Objektes mitgeben? Könntest du kurz ein allgemeines Beispiel posten? Wäre super nett Danke
| |
| | |
| | #4 (permalink) |
| Neuer User Registriert seit: Oct 2007
Beiträge: 434
|
Mal ein Beispiel für beide Richtungen: Hauptklasse: PHP-Code: PHP-Code: Du hast eine Instanz deiner SubKlasse in deiner Hauptklasse, auf die SubKlasse und all Ihre public functions und vars kannst du direkt zugreifen, und Events abfangen. Die Subklasse kann nicht auf die Hauptklasse zugreifen, sondern nur Events dispatchen. Ein klassisches Beispiel wäre eine Loader Klasse. Man erstellt eine Instanz, registriert einen EventListener und ruft dann die z.B. die funktion load bei der Instanz auf. In der Loader Klasse wird nun geladen und wenn das Laden fertig ist, wird ein Event dispatch. Somit weiß dann die Hauptklasse, der Loader ist fertig ich kann jetzt auf die Daten zugreifen. Hoffe das war jetzt verständlicher. Grüße |
| | |
| | #5 (permalink) |
| klein und fein:) Registriert seit: Nov 2009 Ort: Köln
Beiträge: 24
|
Dank! das bringt schonmal Licht ins dunkle ... Was mach ich aber, wenn die Objekte nicht innerhalb der Funktionen der Elternobjekte instanziiert werden? Bsp.: PHP-Code: Bsp.: PHP-Code: ![]() Sorry wenn die Frage dumm ist, hab erst mit Flash angefangen ![]() Geändert von julianeS.85 (05-01-2010 um 17:04 Uhr) |
| | |
| | #6 (permalink) |
| Neuer User Registriert seit: Oct 2007
Beiträge: 434
|
Einfach in deiner Hauptklasse einen EventListener auf Klasse zwei (wo die überprüfung stattfindet). Dann aus der Hauptklasse die Beweg dich funktion von Klasse eins aufrufen. PHP-Code: Frage ist halt, müssen beide Klassen auf einer Ebene sein, oder kann die eine vielleicht eine in der anderen Instanziert werden. Kommt immer drauf an, gutes Klassendesign ist wichtig aber auch nicht einfach. Geändert von Lukas78 (05-01-2010 um 17:30 Uhr) |
| | |
| | #7 (permalink) |
| klein und fein:) Registriert seit: Nov 2009 Ort: Köln
Beiträge: 24
|
Also ich hab es soweit: Klasse1 PHP-Code: myKlasse1.dispatchEvent(new Events(Events.MOVE, null)); funktioniert das ganze! schreib ich es aber direkt in die Funktion der Klasse2 passiert nix: PHP-Code: |
| | |
| | #8 (permalink) |
| Perverted Hermit Registriert seit: Mar 2004 Ort: Delmenhorst
Beiträge: 12.139
|
Deine Klassen erben nicht von EventDispatcher. Der Code kann nicht funktionieren.
__________________ http://icodeapps.net | Meet me at the Flex user group Hamburg talking about CoffeeScript |
| | |
| | #11 (permalink) |
| klein und fein:) Registriert seit: Nov 2009 Ort: Köln
Beiträge: 24
|
Guten morgen! mit neuen Elan in den neuen Tag nachdem der letzte so deprimierend endete ...Sooo, ich hab mal eine Projekt angelegt, welches das Problem entsprechend runter bricht! Hoerer.as PHP-Code: PHP-Code: PHP-Code: PHP-Code: Die Ausloeserklasse erbt von EventDispatcher, wie Omega Psi eingeworfen hat. Der EventListener muss ja dem Element angehangen werden, welches das Ereignis auslöst, richtig? (Sagt mein Buch) Genau da scheint ja mein Problem zu liegen, dass Hoerer einfach nicht hoert, bzw. meint es ist nicht fuer Ihn was Ausloeser ausloest, oder? ![]() Wichtig ist noch, dass die beiden Objekte in keine Beziehung stehen, sprich kein Kind- oder Elternklasse Geändert von julianeS.85 (06-01-2010 um 10:25 Uhr) |
| | |
| | #12 (permalink) |
| Neuer User Registriert seit: Oct 2007
Beiträge: 434
|
Wenn man sich nicht kennt hört man nicht aufeinander, ist wie im richtigen Leben ![]() Von daher musst du schon eine Referenz übergeben entweder im Konstruktor oder in einer separaten Funktion. Letzeres ist flexibler, da kannst du dann mehrere Objekte den Event auslösen lassen. PHP-Code: PHP-Code: |
| | |
| | #13 (permalink) |
| klein und fein:) Registriert seit: Nov 2009 Ort: Köln
Beiträge: 24
|
HAB 1000 DANK! es funktioniert ![]() Falls alle die mal das gleiche Problem haben mit eigenen Events und Kommunikation mit anderen Objekten. So schauts jetzt bei mir fertig aus! hoerer.as PHP-Code: PHP-Code: PHP-Code: PHP-Code: |
| | |
| | #14 (permalink) |
| klein und fein:) Registriert seit: Nov 2009 Ort: Köln
Beiträge: 24
|
Ah eine Frage noch, wie mach ich es, wenn ich das Ausloeser-Objekt in einer Funktion einer Klasse erstellt habe?! In der Praxis siehts bei mir so aus Klasse A -- in einer funktioner der Klasse A wird Klasse B instanziirt -- Klasse B ---- in einer Funktion von Klasse B wird Klasse C instanziirt ---- Klasse C soll mein Ausloeser sein Klasse E = Hoerer Klasse A und E bedinden sich in der main.fla Geändert von julianeS.85 (06-01-2010 um 14:09 Uhr) |
| | |
| | #15 (permalink) |
| Neuer User Registriert seit: Oct 2007
Beiträge: 434
|
Wenn deine Klassen DisplayObjecte sind, kannst du beim dispatchen bubbles auf true setzten, dann geht das Event durch die ganze DisplayListe. Oder du reichst den Event durch, sprich Klasse B erhält einen Listener auf Klasse C, mit der Listener Funktion dispatchEvent und gleiches für A und B Klasse A PHP-Code: PHP-Code: PHP-Code: Geändert von Lukas78 (06-01-2010 um 15:01 Uhr) |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Eigenen Event auslösen? | silentx | ActionScript 3 | 7 | 27-04-2009 10:49 |
| onEnterFrame in einer eigenen Klasse | falconry | ActionScript 2 | 2 | 16-04-2008 15:45 |
| Event einer Klasse an Child-Klasse | salzblog | ActionScript 3 | 5 | 12-09-2007 10:09 |
| Kennt eine Klasse Ihren eigenen Instanznamen? | andi2003 | ActionScript 2 | 23 | 04-12-2006 18:03 |
| eigenen event-handler :onRightPress: | Scrawer | Softwarearchitektur und Entwurfsmuster | 12 | 23-08-2004 21:16 |