Zurück   Flashforum > Flash > ActionScript > Spielkonzepte und Spieleprogrammierung

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 08-12-2006, 16:31   #1 (permalink)
Meep!
 
Registriert seit: Sep 2005
Beiträge: 146
Polygon - physik ?

also ich will endlich mal ne kleine physik engine in flash schreiben bin mir aber nicht sicher, was die optimalste metode zur hittest berechnung ist.

ich schreibe das ganze in AS3.

also ich hab mir folgendes überlegt:
ich überprüfe beim aktuellen polygon erstmal, ob einer der eckpunkte auf dem weg zu nächsten position eine fremde gerade schneidet. nun nehme ich alle fremden eckpunkte und überprüfe, ob einer von diesen mein polygon schneidet, indem ich die entgegengesetzt zum richtungsvektor des aktuellen polygons verschiebe.
nun suche ich den dem aktuellen polyg. nächstgelegenen schnittpunkt(wie genau weis ich noch nicht) und lasse es von diesem abprallen. das ganze ist leider sicher sehr rechenintensiv...hat jemand ne bessere idee/n beispiel oder tutorial?

wäre super

achja: ich weis zwar, wie ich den schwerpunkt des polygons berechne, aber wie kann ich damit und mir dem abprallpunkt die rotation und den abprallwinkel genau berechnen?

danke
__________________
http://www.pixartist.de

Geändert von pixartist (08-12-2006 um 16:32 Uhr)
pixartist ist offline   Mit Zitat antworten
Alt 09-12-2006, 15:48   #2 (permalink)
Neuer User
 
Benutzerbild von fabulos79
 
Registriert seit: Jul 2006
Beiträge: 21
Deine Methode ist sehr rechenaufwändig, wenn du damit alle Objektkollisionen prüfst. Generell sollten nur Objekte "genau" geprüft werden, wenn eine kollision überhaupt in frage kommt.
Ich weiß natürlich nicht, wie deine "Spielwelt" aussieht. Generell habe ich bei solchen Problemen aber gute Erfahrungen damit gemacht fixe Objekte bestimmten Areas zuzuweisen und nur innerhalb einer bestimmten Area zu prüfen.
Bewegliche Objekte müssen sich dann natürlich in Areas "anmelden". Selbstverständlich können Objekte auch in mehreren Areas liegen.

Der eigentlich Prüfvorgang, den du beschreibst, halte ich so für sinnvoll. Er sollte halt nur möglichst selten durchgeführt werden.
fabulos79 ist offline   Mit Zitat antworten
Alt 09-12-2006, 19:24   #3 (permalink)
Meep!
 
Registriert seit: Sep 2005
Beiträge: 146
hm ok...was hältst du von der idee, einen aussenkreis ums polygon zu legen und dann erstmal zu prüfen ob sich dieser kreis überhaupt mit dem anderen objekt schneidet?
__________________
http://www.pixartist.de
pixartist ist offline   Mit Zitat antworten
Alt 09-12-2006, 21:30   #4 (permalink)
DeRailed
 
Benutzerbild von klickverbot
 
Registriert seit: Sep 2006
Beiträge: 321
Diese Idee ist sehr gut

Nein, Scherz beiseite: Auch in der "non-flash" Spieleprogrammierung verwendet man meistens das gleiche Prinzip: Man legt um seine Objekte eine extrem vereinfachte Form – meist eine Kugel oder einen Quader. Dann werden zuerst diese auf Kollision überprüft, bevor die wesentlich rechenaufwändigeren Polygon-Kollisionsberechnungen zum Einsatz kommen.

Du kannst jetzt genau das gleiche mit deinem Polygon machen. Da du ja anscheinend nur 2 Dimensionen hast, arbeite einfach mit Kreisen oder Rechtecken. Kreise hätten den Vorteil, dass die Kollision sehr einfach zu berechnen ist. Pseudocode:
Code:
bool hitTest( obj2 ) {
  int distance = sqrt( abs( x - obj2.x )^2 + abs( y - obj2.y )^2 );
  return distance < ( bSRad + obj2.bSRad)
}
Allerdings ist es nicht ganz so einfach, den Umkreis eines beliebigen Polygons zu berechnen.

Bounding Rectangles sind sehr leicht zu berechnen und sind tendenziell (hängt natürlich von den Objekten ab, die du bevorzugt verwendest) genauer (einfach kleinste und größte x- und y-Koordinaten bestimmen), allerdings erfordern die Kollisionen zwischen ihnen etwas mehr Aufwand.

Was in deinem Fall besser bzw. schneller funktioniert, kann ich dir nicht sagen. Wenn du einen größeren Bereich hast, in dem sich die Objekte befinden, dann zahlt es sich wahrscheinlich aus, diesen in mehrere Bereiche zu unterteilen und dein Polygon immer nur mit den anderen zu vergleichen, die sich im selben Bereich befinden.


Zitat:
nun suche ich den dem aktuellen polyg. nächstgelegenen schnittpunkt(wie genau weis ich noch nicht) und lasse es von diesem abprallen.
Was meinst du genau damit?


Ansonsten kannst du dir ja mal die Arbeiten von André Michelle anschauen, der auch hier im Forum sehr aktiv ist. (http://lab.andre-michelle.com/tag/physics/) Der Typ hat eindeutig zu viel Freizeit^^

Geändert von klickverbot (09-12-2006 um 21:32 Uhr)
klickverbot 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 18:24 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele