| |||||||
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) |
| ein tüüüp Registriert seit: May 2002 Ort: berlin
Beiträge: 627
| Listener statt onEnterFrame? Sinnvoll, oder Mist?
Hi ihrs, ich bastel grad so n kleines spiel wo es auch um Kollisionen und so geht. Nun will ich ja nich überall onEnterFrames zur "Überwachung" laufen lassen, und dache dass Listener hier vielleicht die richtige Wahl sind. Liege ich da falsch und sind Listener nur für Key- und Mouse-Objeke gedacht und nicht als "Ersatz" für onEnterFrame? Sollten Listener geeignet sein, wäre klasse, wenn mir einer ein simples Beispiel hier reinkopieren/schreiben könnte, so dass ich das nachvollziehen kann... Die Flash-Hilfe is in dem Punkt nich so der Brüller. Vor allem nich wenn es um selbt-geschriebene Listener-Objekte geht. Vielen Dank im Voraus und Grüße Fäb |
| | |
| | #3 (permalink) |
| Techniker Registriert seit: Sep 2003 Ort: 64807
Beiträge: 17.289
|
alle kollisionen in einem einzigen onEnterFrame behandeln! wenn jedes objekt selbst kollisionen testet, dann testest du letztendes bei 10-objekten 10*(10-1) = 90 kollisionen. da aber a gegen b die selbe kollision ist, wie b gegen a langt es n(n-1)/2 = 10*(10-1)/2 = 45 kollisionen zu testen. Code: for (var a=1; a<10; a++){
for (var b=a+1; b<=10; b++){
trace(a+"-"+b);
}
}
__________________ die ultimative antwort auf alle programmierfragen: der debugger mfg h.g.seib www.SeibsProgrammLaden.de Geändert von hgseib (12-02-2008 um 00:48 Uhr) |
| | |
| | #4 (permalink) |
| ein tüüüp Registriert seit: May 2002 Ort: berlin
Beiträge: 627
|
Danke schonmal ... es ist nicht so, dass jedes Objekt mit jedem kollidiert: Es gibt ein Hauptobjekt (Charakter). Dieses kollidiert mit - ich nenne Sie mal Unterobjekte -, bzw. sollen diese reagieren, wenn das Hauptobjekt daran "vorbeifährt" (Hauptobjekt._x >= Unterobjekt._x). Die "Reaktion" ist eine Funktion, die ausgeführt werden soll. Und das kann bei einer Kollision beim Charakter Mimik 1 oder Mimik2 oder Mimik 3 sein... Deswegen dachte ich an Listener... Wie kann ich das am elegantesten lösen? Danke vorab für eure Hilfe |
| | |
| | #5 (permalink) |
| Techniker Registriert seit: Sep 2003 Ort: 64807
Beiträge: 17.289
|
ein listener besitzt ein array. es gibt ein ereignis und das wird an alle objekte im array gesendet. hierbei ist einer der auf das ereignis wartet natürlich vorteilhafter, als wenn 100 auf das selbe ereignis warten. eine kollision ist eine individuelle sache. ich weiss nicht, welchen nutzen du hierbei von einem listener erwartest? wenn deine unterobjekte nicht miteinander kollidieren können, dann bleibt sowieso nur noch einer übrig: dein hauptobjekt. und das alleine muss regelmässig testen. also eine function, die ausgeführt wird, wenn sich das haupt oder eins der unterobjekte bewegt. das ist aber irgendwie das genaue gegenteil von einem listener. viele ereignisse und ein objekt (die function). verpass deinem hauptobjekt ein onEnterFrame. durch ein einziges onEnterFrame wird flash schon nicht in die knie gezwungen ;-) in dieser function kannst du alle unterobjekte in ein array packen. in das array kannst du neu auf der bühne erscheinende objekte hinzufügen, bzw. wieder entfernen, wenn sie nicht mehr auf der bühne sind. (das ganze ist aber kein listener, sonder nur ein array).
__________________ die ultimative antwort auf alle programmierfragen: der debugger mfg h.g.seib www.SeibsProgrammLaden.de Geändert von hgseib (12-02-2008 um 15:56 Uhr) |
| | |
| | #7 (permalink) |
| mushroom powered Registriert seit: Jun 2005 Ort: Amsterdam
Beiträge: 2.649
|
Also im onEnterFrame alle berechnungen durchfuehren, du koenntest in deinem "Charakter" ein Listener an das "Objekt" haengen, bzw. dort wo die Berechnungen durchgefuehrt werden. Und dann ein Event dispatchen wenn eine Kollision besteht. |
| | |
| | #8 (permalink) |
| ein tüüüp Registriert seit: May 2002 Ort: berlin
Beiträge: 627
|
so - das scheint gut zu klappen mit den Abfragen in einem onEnterFrame - schön ![]() Nun habe ich da noch n kleines Problem. Wenn ich die Kollision innerhalb des onEnterFrame meines Hauptobjekts abfrage, und einem anderen MC bei Kollision einen "goto-Befehl" zuweise (damit dieser seine Animation abspielt), dann wird der goto-Befehl immer wieder aufgerufen, bis die Kollision "fertig" ist. Fazit: die Animation läuft nicht einmal ab, sondern startet immer wieder bei Frame 1, bis der MC bereits vorbei is - dann läuft sie einmal durch *hmmm Gibts da ne einfache Möglichkeit, dass er den goto-Befehl nur einmal ausführt und nich andauernd? Momentan löse ich das mit einem true/false-Zähler für jedes Kollisionsobjekt, die am Anfang alle auf true stehen und sobald der Vorgang abgelaufen ist auf false gesetzt werden. Funktioniert auch, scheint mir aber umständlich... |
| | |
| | #10 (permalink) |
| Techniker Registriert seit: Sep 2003 Ort: 64807
Beiträge: 17.289
|
wenn ich das richtig verstanden habe, dann ist das so korrekt. wenn der kollisionszustand länger anhalten kann und wenn du pro kollision etwas nur einmalig haben möchtest, dann musst du für diesen einmaligen zustand ein erkennungs-flag setzen.
__________________ die ultimative antwort auf alle programmierfragen: der debugger mfg h.g.seib www.SeibsProgrammLaden.de |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |