Zurück   Flashforum > Flash > Flash Fortgeschritten > Flash MX 2004

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 11-02-2008, 18:37   #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
fabbsen ist offline   Mit Zitat antworten
Alt 11-02-2008, 19:14   #2 (permalink)
Neuer User
 
Registriert seit: Jul 2003
Beiträge: 1.227
Ich glaube 100 Listener sind auf jeden Fall performanter als 100 Objekte mit onEnterFrame zu überwachen... aber da bin ich auch noch kein Experte...
__________________
EDV = Ende Der Vernunft
hmpf ist offline   Mit Zitat antworten
Alt 12-02-2008, 00:46   #3 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 18.048
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);
  }
}
hinzu kommt, wenn du einzeln testest und reagierst, dann stimmt das gesamtergebnis nicht, da sich die ersten objekte bereits bewegen, noch bevor die letzten eine kollision mit diesen ermitteln können.
__________________
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)
hgseib ist offline   Mit Zitat antworten
Alt 12-02-2008, 12:10   #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
fabbsen ist offline   Mit Zitat antworten
Alt 12-02-2008, 15:52   #5 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 18.048
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)
hgseib ist offline   Mit Zitat antworten
Alt 12-02-2008, 16:39   #6 (permalink)
ein tüüüp
 
Registriert seit: May 2002
Ort: berlin
Beiträge: 627
Hey - danke für den Tipp, manchmal sieht man den Wald vor lauter Bäumen nicht

Ich komme vermutlich tatsächlich mit dem onEnterFrame auf dem Hauptobjekt aus... schick, schick

Danke vielmals!!!
fabbsen ist offline   Mit Zitat antworten
Alt 12-02-2008, 18:09   #7 (permalink)
mushroom powered
 
Benutzerbild von b.asile
 
Registriert seit: Jun 2005
Ort: Amsterdam
Beiträge: 2.647
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.
__________________
[ WHEN THE GOING GETS WEIRD THE WEIRD TURN PRO ]

devboy.org
b.asile ist offline   Mit Zitat antworten
Alt 13-02-2008, 17:00   #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...
fabbsen ist offline   Mit Zitat antworten
Alt 13-02-2008, 17:22   #9 (permalink)
Think French...
 
Benutzerbild von matt-murdock
 
Registriert seit: Jan 2006
Beiträge: 1.393
Zitat:
das mit einem true/false-Zähler für jedes Kollisionsobjekt,
mach ich auch so...

a+
__________________
Hab mit Flash aufgehört....
matt-murdock ist offline   Mit Zitat antworten
Alt 13-02-2008, 17:26   #10 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 18.048
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
hgseib ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 17:56 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2014 Marc Thiele