| |||||||
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) |
| Neuer User Registriert seit: Dec 2010
Beiträge: 64
| MC aus Klasse heraus aufrufen
Ich habe einen Button der von der Main Timeline folgenden Pfad hat: mainMenu.btnAbout Weise ich diesem Objekt ein Event zu, ist das kein Problem solange sich der Code auf der Main Timeline befindet. Aus einer Klasse heraus geht das nicht und Flash jammert, dass es das Objekt nicht finden kann. Hier der Code der Klasse: PHP-Code: |
| | |
| | #2 (permalink) |
| Flash-Designer Registriert seit: May 2006 Ort: Wiesbaden
Beiträge: 6.162
|
Wenn Du Deine Klasse mit einem Symbol in der Bibliothek verbunden hast(?), sollte sie auch eine Anzeigeklasse erweitern (z.B. Sprite). Dann sind Klasse und Symbol quasi identisch. D.h. wenn in dem Symbol eine Objekt mit dem Instanznamen btnAbout liegt, solltest Du auch in der Klasse mit diesem Namen darauf zugreifen könne (und zwar ohne mainMenu davor). P.S.: KlassenNamen sollte man immer mit einem Großbuchstaben beginnen und "classes" ist IMHO ein ziemlich überflüssiger Name für ein Klassenpaket.
__________________ Viele Grüße // Martin Martin Kraft // Interaktionsdesign Hilfreiche Websites: // Hilfe zur Adobe Flash Plattform // ActionScript 2 Referenz // ActionScript 3 Referenz // ActionScript 3 Arbeitshandbuch // weitere Flash Ressourcen Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da! |
| | |
| | #3 (permalink) |
| Neuer User Registriert seit: Dec 2010
Beiträge: 64
|
Guten Morgen und danke für deine Antwort. Ich habe die Klasse nicht mit dem Button verknüpft (ich nehme an du meinst in der Bib). Die Klasse binde ich so ein: PHP-Code: PHP-Code: Ich hatte mal eine andere Klasse, der ich den Button, dem ich Events zuweisen möchte als MC übergebe. Diesen dann in der Klasse zu verwenden war dann kein Problem. Geht das nicht? Danke! |
| | |
| | #4 (permalink) |
| Keine Panik Registriert seit: Apr 2010 Ort: Düsseldorf (im ernst)
Beiträge: 1.866
| PHP-Code: wenn du "mainMenu.irgendwas" (bspw mainMenu.btnAbout) aufrufst, wie soll Flash da wissen, ob es da auf die Klasse oder die Instanz zugreifen soll? Und bitte auch keine Funktionen verschachteln. V1: MainMenu als Controller (so wie du es gebaut hast): PHP-Code: PHP-Code: du kannst das ganze auch um paar Methoden zum nachträglichen hinzufügen und löschen von Buttons ergänzen. V2: MainMenu als Container: hierfür musst du in der Bibliothek einen leeren MovieClip anlegen, und ihm die folgende Klasse zuweisen, nun kommen alle Buttons in diesen MovieClip rein: PHP-Code: Anmerkung: so wie der Code momentan aussieht, geht dieses MainMenu weder davon aus, dass du da Objekte reinzeichnest, noch, dass eines der Objekte darin kein Button ist, also ausgenommen werden soll, dass müsstest du ergänzen. ebenso geht es davon aus, dass sich die Buttons direkt im MainMenu befinden, sprich bei sowas PHP-Code: wie du das im einzelfall ändern musst, kommt halt darauf an, wie du das ganze zusammenbaust |
| | |
| | #5 (permalink) | |
| Neuer User Registriert seit: Dec 2010
Beiträge: 64
| Zitat:
PHP-Code: PHP-Code: Geändert von magic_al (28-11-2011 um 16:32 Uhr) | |
| | |
| | #6 (permalink) | |
| Keine Panik Registriert seit: Apr 2010 Ort: Düsseldorf (im ernst)
Beiträge: 1.866
| Zitat:
PHP-Code: Weil ein DisplayObject ist immer auch ein Objekt, aber ein Object muss nicht zwangsläufig ein DisplayObject sein. kann bspw auch ein Timer sein. also musst du casten: PHP-Code: edit, nachtrag: es ist wirklich nicht nötig komplette Posts zu zitieren, besonders wenn du direkt darauf antwortest | |
| | |
| | #7 (permalink) |
| Flash-Designer Registriert seit: May 2006 Ort: Wiesbaden
Beiträge: 6.162
| @thomas_E: Wieso verwendest Du eigentlich nicht einfach e.currentTarget oder schlicht this statt dieser seltsamen realTarget-Konstruktion.
__________________ Viele Grüße // Martin Martin Kraft // Interaktionsdesign Hilfreiche Websites: // Hilfe zur Adobe Flash Plattform // ActionScript 2 Referenz // ActionScript 3 Referenz // ActionScript 3 Arbeitshandbuch // weitere Flash Ressourcen Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da! |
| | |
| | #8 (permalink) |
| Keine Panik Registriert seit: Apr 2010 Ort: Düsseldorf (im ernst)
Beiträge: 1.866
|
weil du dann addChild, removeChild, etc überschreiben musst, um die Event-Listener an die einzelnen children anzuhängen bzw wieder zu entfernen, und ich bin mir grad nicht sicher, ob addChild für Zeitleistenobjekte überhaupt ausgeführt wird. und this ist ja der Container selber, ich brauch aber das Kindelement auf das geklickt wurde. mir schien es die einfachere Lösung hier auf das Event-Bubbling zu setzen, und das Event direkt beim Container abzufangen. (ich benutz sonst wirklich nicht oft e.target) der Workaround mit realTarget fängt "fehler" ab, wenn die Objekte verschachtelt sind (und mouseChildren=false ggf "vergessen" wurde) fällt dir spontan was eleganteres ein? oder denk ich mal wieder viel zu kompliziert? |
| | |
| | #9 (permalink) |
| Neuer User Registriert seit: Dec 2010
Beiträge: 64
|
Vielen dank! Könntest du/ihr versuchen mir zu erklären, was ein Sprite ist? Ich habe mal gesucht und heraus gefunden, dass es ein abgespreckter MC sein soll. Was ist der Sinn davon? Und was macht die Funktion realTarget() im obrigen Beispiel genau? Ich würde das gerne verstehen, bevor ich es verwende. Ein Container stelle ich mir jetzt mal vor als ein MC oder Sprite der ander MCs umfasst und von dem ausgehend ich die unterelemente (Childs?!?) aufrufen kann. Lieg ich damit in etwa richtig? PS: könnte ich das hier auch verwenden um alle MCs in dem MC auf einmal auszublenden? Geändert von magic_al (29-11-2011 um 12:51 Uhr) |
| | |
| | #10 (permalink) | |||||
| Keine Panik Registriert seit: Apr 2010 Ort: Düsseldorf (im ernst)
Beiträge: 1.866
| Zitat:
Zitat:
Zitat:
Der Hintergrund des ganzen ist die Art und weise wie Events funktionieren. (google mal nach Event-Bubbling) es geht darum, wenn du bspw auf menu.level1.level2.level3 klickst wird das Event erst für level3 gefeuert, dann für level2, level1, menu, root und stage. Eas Event wandert langsam die DisplayList (eher Baum) hoch. nun steht in Event.target das Objekt, dass das Event ausgelöst hat (hier level3), und in Event.currentTarget das objekt, bei dem su das abgefangen hast. auf den obigen Code bezogen: der Event-Listener liegt auf menu, das Event wird evtl von level2, level3, oder noch tiefer gefeuert. für den Code brauch ich aber immer level1. realTarget nimmt nun e.target, also level1, 2, 3, etc und wandert dann die DL so lange hoch, bis es bei level1 landet, und gibt dann dieses Objekt zurück. das schien mir eine gute vorgehensweise, Martin findet das seltsam. Das Problem ist für mich hier die Unberechenbarkeit der Zeitleiste, und deines Programmierstils. wenn ich programmiere, benutz ich fast nur Code, und die Zeitleiste höchstens um "grafiken" zu erstellen. dann kann ich bspw für die Buttons mouseChildren = false setzen, dadurch würde hier in e.target immer das richtige Objekt drinstehen. oder wie Martin geschrieben hat: beim hinzufügen eines Buttons zum Menu, direkt ein EventListener auf das Kindelement setzen, und ich in e.currentTarget steht nun immer der korrekte Button drin. da ich hier nicht genau weiss, wie sich deine Buttons verhalten werden, hab ich (erstmal) diesen Workaround über die Funktion realTarget gewählt. Zitat:
Zitat:
| |||||
| | |
| | #11 (permalink) |
| Flash-Designer Registriert seit: May 2006 Ort: Wiesbaden
Beiträge: 6.162
| Ne, ist schon ok. Ich hatte das Script nur überflogen und übersehen, dass Du das RollOver vom Container aus in die Buttons injezierst....
__________________ Viele Grüße // Martin Martin Kraft // Interaktionsdesign Hilfreiche Websites: // Hilfe zur Adobe Flash Plattform // ActionScript 2 Referenz // ActionScript 3 Referenz // ActionScript 3 Arbeitshandbuch // weitere Flash Ressourcen Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da! |
| | |
| | #14 (permalink) |
| Keine Panik Registriert seit: Apr 2010 Ort: Düsseldorf (im ernst)
Beiträge: 1.866
|
am einfachsten ist, das menü selber auszublenden, und garnicht die Kindelemente selber. ansonsten, so kommst du an die Kind-Elemente: PHP-Code: Geändert von thomas_E (29-11-2011 um 20:30 Uhr) |
| | |
| | #15 (permalink) |
| Neuer User Registriert seit: Dec 2010
Beiträge: 64
|
Achso, während Parent das übergeordnete Objekt beschreibt, beschreibt Child die untergeordneten? Danke! EDIT: PHP-Code: Geändert von magic_al (29-11-2011 um 21:16 Uhr) |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Aus Klasse heraus Funktion in der Hauptzeitleiste aufrufen | Jay84 | ActionScript 3 | 3 | 30-10-2009 14:18 |
| Klasse aus Klasse heraus ansprechen? | echo5-7 | ActionScript 2 | 5 | 11-04-2008 11:39 |
| Methode einer Klasse aus anderer Klasse aufrufen | Chris M. | Softwarearchitektur und Entwurfsmuster | 5 | 05-01-2005 15:04 |
| Links aus MC heraus aufrufen | Rainy | Flash MX | 6 | 28-08-2003 12:56 |
| PHP aus Flash heraus aufrufen | flash_idiot | Flash 4 und Flash 5 | 5 | 27-06-2002 13:32 |