| |||||||
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 2011
Beiträge: 3
| Funktion registrieren klappt nicht wie ich will
Moin, ich bin neu hier und entschuldige mich erstmal für meinen Threadtitel. Ich wusste einfach nicht wie ich mein Problem nennen soll. Macht auch das googlen schwer. Ich habe mal meine "Problem"-Klassen abstrahiert und führe diese im Folgenden auf:Hier erstmal meine Klassen: Code: public class MyClass
{
public var mouseClickHandler:Function = new Function();
// Konstruktor, Events registrieren etc.
public function mouseHandler(evt:MouseEvent)
{
switch (evt.type)
{
case MouseEvent.CLICK:
mouseClickHandler();
break;
}
}
} Code: public class ManagerClass
{
// Konstruktor etc.
private static function foo()
{
for each(var i:int in myArray)
{
var mC:MyClass = new MyClass();
mC.mouseClickHandler = function()
{
machIrgendwasMit(i);
}
}
}
private static function machIrgendwasMit(i)
{
trace(i);
}
} Warum ist das so? Wie kann ich das ohne diesen Fehler bewerkstelligen? |
| | |
| | #2 (permalink) |
| Techniker Registriert seit: Sep 2003 Ort: 64807
Beiträge: 16.324
|
willkommen im flashforum!!! oje, schmeiss deine scipte ganz schnell weg ;-) so macht man das nicht! schau doch mal in der flash-hilfe nach. da ist das mit den listenern erklärt. und lies doch mal ein paar beispiele hier im forum. suche z.b. nach: addEventListener zu deiner frage selbst: mC.mouseClickHandler = function() { machIrgendwasMit(i);} in deiner schleife zählst du i hoch. der clickhandler wird 'wochen' später angesprochen und soll sich dann noch erinnern, welchen inhalt die variable i zum damaligen zeitpunkt der zuordnung der function hatte. dieses i ist aber mit der function foo gestorben. bzw. wenn es i noch gibt, dann ist dessen inhalt natürlich der endzustand nach dem for each. i gibt es nur einmal. erkläre doch mal, was das ganze geben soll. dann kann man dir vermutlich eher helfen. ein paar einfache beispiele zu as9: H.G.Seib p.s. auch nicht so prickelnd, du kannst der klasse die variable übergeben und dort speichern. var mC:MyClass = new MyClass(i); aber die events funktionieren ohne nummerierung der mc's.
__________________ die ultimative antwort auf alle programmierfragen: der debugger mfg h.g.seib www.SeibsProgrammLaden.de Geändert von hgseib (07-12-2011 um 22:29 Uhr) |
| | |
| | #3 (permalink) |
| Flash-Designer Registriert seit: May 2006 Ort: Wiesbaden
Beiträge: 6.162
| Hallo und willkommen im Forum! Zunächstmal kannst Du froh sein, dass i da überhaupt noch definiert ist (was was mit Closures zu tun hat).
Generell find' ich den Aufbau Deiner Klassen auch nicht so wahnsinnig sinnvoll: Ist es nicht wahnsinnig umständlich einen zentralen Listener mit den ganzen cases zu definieren, nur um mit von außen injezierten Callback-Funktionen arbeiten zu können? Mal ganz abgesehen davon, dass man so nur einen Listener definieren kann... Wäre es nicht wesentlich einfach die Listener (ggf. in der Klasse selbst) auf herkömlichem Weg zu definieren und die variablen Werte von außen in entsprechenden Variablen speichert? P.S.:
__________________ 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! Geändert von Martin Kraft (07-12-2011 um 22:23 Uhr) |
| | |
| | #4 (permalink) |
| + Zimt & Zucker Registriert seit: Mar 2006 Ort: hinterm Mond gleich links
Beiträge: 2.040
|
Du kannst den Listener uU auch einfach an den Container all deiner mcs anhängen und dann mit evt.target arbeiten. Zum index kommst du dann über indexOf()
__________________ anbei Grüße vom milchreis: Viva la [Silb] "Selbst wenn uns nur noch der Zynismus treibt, wir werden trotzdem einfach immer weiter gehen!" [Von null auf Flash in einem Klick.] <<< klick |
| | |
| | #5 (permalink) |
| Neuer User Registriert seit: Dec 2011
Beiträge: 3
|
Erstmal Danke für die Antworten. Was ich in meinem ersten Post geschrieben habe, war wohl alles andere als schön. Ich weiß auch nicht, was ich mir dabei gedacht habe. Ich erläutere mal, was ich haben möchte und ihr gebt mir dann den richtigen Ansatz. ![]() Ich habe eine Klasse welche u.a. für klickbare TextFields zuständig ist (im Prinzip Hyperlinks). Je nach Verwendung sollen verschiedene Aktionen (Funktionen + Parameter) ausgeführt werden. Also unterschiedliche ClickEvents. Warum ich das bisher so umständlich und nicht direkt mit addEventListener() gemacht habe, liegt daran, dass ich bei der Funktion, die bei einem ClickEvent aufgerufen wird, Parameter übergeben möchte. Bisher kam ich mit meiner unhübschen Variante auch gut zurecht, aber jetzt, wo ich keine Literale verwende, sondern Variablen (das i in der Schleife) gibt es natürlich Ärger (Danke für die Erklärung, eigentlich total logisch ). Also: Objekte einer Klasse, sollen Funktionen (mit unterschiedlichen Parameterwerten) ausführen, welche in anderen (Manager-)Klassen definiert sind. Manager-Klassen sind bei mir Klassen, die ausschließlich static-Methoden verwenden und den "Spielflow" steuern. |
| | |
| | #6 (permalink) |
| Flash-Designer Registriert seit: May 2006 Ort: Wiesbaden
Beiträge: 6.162
|
Der Aufbau kommt mir immer noch nicht so wahnsinnig glücklich vor:
ActionScript:
__________________ 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! Geändert von Martin Kraft (08-12-2011 um 15:27 Uhr) |
| | |
| | #7 (permalink) |
| Keine Panik Registriert seit: Apr 2010 Ort: Düsseldorf (im ernst)
Beiträge: 1.867
|
Statische Klassen machen nur als Container für Utility-Funktionen sinn, nicht für Daten. Der Grund dafür ist, dass man sie nicht vernünftig referenzieren kann, und dadurch kann man sie nicht (so einfach) austauschen. Was spricht dagegen, das static da wegzumachen, und eine Instanz der Manager-Klasse zu verwenden? (außer der Arbeit, die du jetzt einmal hast) Diese Instanz kannst du dann jedem Objekt übergeben, dass sie kennen muss. Und die Parameter sind so auch immer dabei. |
| | |
| | #8 (permalink) |
| Neuer User Registriert seit: Dec 2011
Beiträge: 3
|
Hmm... ich glaube, ich konnte mein Vorhaben immer noch nicht klar rüberbringen, aber ist auch kein Problem. Die Geschichte mit den e.target hat mich auf eine Idee gebracht, welche mich zu einer Lösung geführt hat. Vielen Dank. Ganz korrekt wird es auch nicht sein, was ich hier mache, aber der Zeitdruck zwingt mich dazu. ![]() Habe meinen Code auf jeden Fall so überarbeitet, dass es "korrekter" sein sollte als vorher. Die Static-Manager habe ich durch meine Zeit mit der Programmierung mit dem XNA-Framework (C#) mitgebracht. Dort wird das sehr viel genutzt. |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Text-scale-Funktion klappt nicht richtig | hceins | Flash CS5 Professional | 0 | 27-07-2010 13:58 |
| Funktion klappt nicht | Da-JS | Flash Einsteiger | 4 | 04-06-2006 09:57 |
| setInterval(funktion, ...) klappt nicht. | one2tim | ActionScript 1 | 3 | 28-02-2006 16:06 |
| variabler button mit funktion. klappt nicht! | ikonograf | Flash MX 2004 | 6 | 07-11-2005 10:38 |