Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

05.11.2006, 10:13

Kollisionerkennung für 2D-Weltraum Ballerspiel

Hi

ich programmiere zurzeit an einem 2D-Ballerspiel. Ich habe da einige Fragen zu Kollisionserkennung :

Meine Idee war, das ich die belegten Koordinaten in der Objekt-Klasse speicher und dann durchgehe, ob 2 Objekte überschneidene x Koordinaten haben. wenn ja, dann check ich die y koordinaten und wenn die auch noch überschneiden sind, gibst dann ne folge, explosion oder sowas. :)
jetz kommt aber das problem, meine raumschiffe sind ja keine rechtecke sonder unförmige viecher :D
könntet ihr mir das evtl nen tipp geben, wie man so eine erkennungen für vieleckige Objekte am besetn löst?

Danke im Vorraus,
MfG
Eldarion72

Firefly

Alter Hase

Beiträge: 484

Wohnort: Irgendwoundnirgendwo

  • Private Nachricht senden

2

05.11.2006, 13:42

Prinzipiell gibt es zwei Möglichkeiten:
1.Du umgibst deine Objekte mit Bounding-Boxen. Soll heißen du definierst für jedes Objekt ein Rechteck(oder mehrere, genauer aber langsamer) und testest dann die Rechtecke auf Kollision.
2. du definierst für jedes Objekt eine Pixelmaske und prüfst dort dann auf Kollision(beste Methode)

Tipp: einfach mal unter google.de suchen

Till

Alter Hase

Beiträge: 378

Wohnort: Lincoln College, Oxford

Beruf: Student

  • Private Nachricht senden

3

05.11.2006, 13:47

Da gibt's unheimlich viele Techniken, denn Du musst aufpassen, dass sowas nicht zum Performance-Problem wird ... wie viele Objekte sind das denn? Wie gross sind sie? Wie genau muss die Kolliosionserkennung denn sein? Genau das ist naemlich der Knackpunkt - oft (vor allem bei kleinen 2D-Objekten) kann man sich zufrieden geben mit der Tatsache, dass die Objekte etwa rechteckig sind (Bounding Box) oder etwa kreisfoermig oder vielleicht zumindest immer eines von beiden.
Falls Dein Objekt (Raumschiff oder was auch immer) zu unfoermig ist, ueberlege einfach, wie Du es vereinfachen kannst, z.B. zwei oder drei Boxen drueberziehen - Regel Nummer 1 ist es aber, irgendwie eine geometrische Vereinfachung zu finden, denn Pixelgenaue Kollisionsabfrage bei vielen Objekten kann ganz schoen schief gehen! :lol:
DOMINVS ILLVMINATIO MEA
---
Es lebe unmanaged Code!
---
>> Meine Uni <<

4

05.11.2006, 14:29

das problem ist, meine raumschiffe kann man sich ähnlich vorstellen, wie die sternenkreuzer oder wie sie hießen von Star-Wars 8)
also nen dreieck mit 2 quadern oben drauf.

es könnte schonma passiern, das ca. 5-8 raumschiffe auf dem bildschirm sind. ebenso halt jede menge laser bitmaps :D

und mein problem ist halt das dreieck. kann man auch dreieckige boundingboxen machen?
oder sollte man dann einfach hinten am raumschiff, wo man eigentlich eh nicht getroffen wird, die boundingbox etwas ungenau.
die performance frage war nämlcih auch mien problem^^.
deshalb habe iach auch gefragt, weil mir kein weg eingefallen ist wie ich performance schonend das proggen könnte.
hmm, größe der bitmap wird so überschlagen bei 50x30 pixeln liegen.

und da die raumschiffe eben einen dreieckigen grundkörper haben, käme dafür evtl eine pixelmaske in frage. weil es säh scon sehr komisch aus, wenn das schiff explodiert, bevor der laser das schiff erreicht hat:D

trotzdem schonma danke für die ganzen antowrten

evlt wär der beste weg dann, eine pixelmaske über das dreieck lege und 2 bounding boxen über die beiden rechtecke. was haltet ihr von der idee?

edit: gibt es für bounding boxen oder pixel masken schon vordefinierte klassen oder muss ich die selber schreiben :?:

Till

Alter Hase

Beiträge: 378

Wohnort: Lincoln College, Oxford

Beruf: Student

  • Private Nachricht senden

5

05.11.2006, 21:30

Zitat von »"Eldarion72"«

das problem ist, meine raumschiffe kann man sich ähnlich vorstellen, wie die sternenkreuzer oder wie sie hießen von Star-Wars 8)
also nen dreieck mit 2 quadern oben drauf.


Ok, hab' ne Vorstellung :lol:

Zitat von »"Eldarion72"«


es könnte schonma passiern, das ca. 5-8 raumschiffe auf dem bildschirm sind. ebenso halt jede menge laser bitmaps :D


na gut, das sind nicht wirklich viele ... muesste eigentlich locker mit Pixelmaske gehen ....

Zitat von »"Eldarion72"«


und mein problem ist halt das dreieck. kann man auch dreieckige boundingboxen machen?


Geht alles - wenn Deine Dreiecke rechtwinklig sind, kannst Du es Dir ja als eine halbe Bounding-Box vorstellen!

Zitat von »"Eldarion72"«


oder sollte man dann einfach hinten am raumschiff, wo man eigentlich eh nicht getroffen wird, die boundingbox etwas ungenau.


Genau das meinte ich - oft muss nicht ueberall so genau sein. Und dann ist es auch noch so, dass zwei Bounding-Boxes (selbst bei einem Dreieck) auch einen recht guten Job machen (zeichne es mal auf ein Blatt, dann siehst Du, wie gut 2 oder sogar 3 sind).

Zitat von »"Eldarion72"«


hmm, größe der bitmap wird so überschlagen bei 50x30 pixeln liegen.


Ok, das ist nicht wenig (fuer 2D-Weltraum-Shooter) ...

Zitat von »"Eldarion72"«


und da die raumschiffe eben einen dreieckigen grundkörper haben, käme dafür evtl eine pixelmaske in frage. weil es säh scon sehr komisch aus, wenn das schiff explodiert, bevor der laser das schiff erreicht hat:D


Pixelmaske ginge auch, vor allem bei der kleinen Anzahl an Raumschiffen, trotzdem tendiere ich zu Bounding-Boxen ... ausserdem kleiner Tipp: lass' die Raumschiffe erst ein klein wenig spaeter explodieren - behebt zum Teil das Problem und wirkt einfach besser!

Zitat von »"Eldarion72"«


evlt wär der beste weg dann, eine pixelmaske über das dreieck lege und 2 bounding boxen über die beiden rechtecke. was haltet ihr von der idee?


Ich wuerde entweder eine einzige Pixelmaske oder mehrere Boxen benutzen!

Zitat von »"Eldarion72"«


edit: gibt es für bounding boxen oder pixel masken schon vordefinierte klassen oder muss ich die selber schreiben :?:


Klar, schon mal danach gegooglet?
DOMINVS ILLVMINATIO MEA
---
Es lebe unmanaged Code!
---
>> Meine Uni <<

6

06.11.2006, 15:29

Hi

ich glaub ich hab die pixel größe etwas überschätzt :D
ich ahb net dran gedacht, das ich das game ja in 640x480 ausüfhre und das da die pixel ja ein wenig größer sind. :D

ich habe gestern abend nochma die grafiken genauer ausgearbeitet. dabei is mir aufgefallen, das für meine grafiken eine draufsicht doch erheblickh besser aussehe. dann würden pixelmasken glaub ich net mehr al zu schwer.

ist so etwas mit pixelmaske gemeint?
http://www.codeworx.org/gamedev_tuts_kollision_pixel.php
eine bitmaske? :?:

noch eine frage wovon abhängt, ob ich bounding boxen oder pixelmaske nehmen^^, kann man boundingboxen auch praktisch nur viereckig erstellen? also keine rechtecke.^^

Mfg
Eldarion72

rklaffehn

Treue Seele

Beiträge: 267

Wohnort: Braunschweig

  • Private Nachricht senden

7

06.11.2006, 17:34

Das Tut scheint genau das zu sein, was du brauchst. Da wird dann auch deine Frage beantwortet (glaube ich, nach einem kurzen Querlesen)
God is real... unless declared integer.
http://www.boincstats.com/signature/user_967277_banner.gif

8

06.11.2006, 17:37

ok, ich gucks mir nacher ma an :)

Till

Alter Hase

Beiträge: 378

Wohnort: Lincoln College, Oxford

Beruf: Student

  • Private Nachricht senden

9

06.11.2006, 17:45

Ja, Pixelmaske = Bitmaske

Und "Vierecke aber keine Rechtecke"??? Rechtecke sind doch Vierecke! Meinst Du Quadrate mit "Vierecke"? Falls ja, Bounding Boxen sind Rechtecke!
DOMINVS ILLVMINATIO MEA
---
Es lebe unmanaged Code!
---
>> Meine Uni <<

10

06.11.2006, 20:27

öh, viereck und rechteck sind unterschiede ;)
rechteck muss parralle kanten haben. viereck net ;)

Werbeanzeige