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

De_Struktor

unregistriert

1

16.02.2013, 01:56

Kollisionserkennung für 2D in XNA

Hallo Liebe Community,

Momentan bin am Programmieren eines 2D Bomberman Klones, das schon einigermaßen funktioniert.
Alle Äußeren Blöcke sind da und die Spielfigur kann sich auch bewegen(nach links, rechts,oben unten) und rennt auch nicht gegen die Wand
Nur wer bomberman kennt, weiß das es viele blöcke für die Mitte gibt, bei mir so um die 110^^.Ich habe zwar schon Kollision für den Rahmen erreicht, jedoch müssen es ja auch für alle blöcke gegeben sein.
und ich kann nicht für alle einzeln die kollision extra berechnen. Ich brauche quasi eine funktion, der ich das objkekt übergeben kann und dann, zur laufzeit wird gekuckt, ob sich meine figur gegen eines der blöcke bewegt und dann halt stehen bleibt.

daher meine frage, ob jemand sowas für xna kennt.

mfg

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

16.02.2013, 03:02

und ich kann nicht für alle einzeln die kollision extra berechnen. Ich brauche quasi eine funktion, der ich das objkekt übergeben kann und dann, zur laufzeit wird gekuckt, ob sich meine figur gegen eines der blöcke bewegt und dann halt stehen bleibt.

Wo liegt das Problem? Du weißt ja wohl, wo deine Spielfigur sich befindet. Und anhand dieser Information, sollte sich die Anzahl der Blöcke, mit denen die Figur überhaupt rein prinzipiell kollidieren könnte, ja schonmal drastisch einschränken lassen... ;)

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

3

16.02.2013, 10:19

ich denke mal, dass er bisher versucht, alle möglichen Kollisionen hard-coded zu prüfen
soll heißen: wenn er einen Block mehr auf seine Map legt, kommt auch eine weitere If-Abfrage dazu

das ist allerdings nicht der richtige Ansatz
man sollte sich seinen Spieler (u. a. dessen Position und Ausmaße) und alle Blöcke (ebenfalls Position und Ausmaß) speichern
da man die Blöcke alle in einer Liste speichert muss man lediglich den Spieler mit den in der Liste befindlichen Objekten auf Kollision prüfen

was dot bereits angedeutet hat:
viele dieser Prüfungen sind unnötig, da eine Kollision nicht stattfinden kann
allerdings sollte man erstmal die grundlegende Funktionalität implementiert und verstanden haben, bevor man sich an Optimierungen wagt ;)
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

16.02.2013, 10:41

Bomberman ist doch normalerweise Tile-basiert, nicht wahr? D.h. alle Objekte (inklusive Spielfigur und Bomben) und Wände sind in einem Gitter angeordnet, wie Rechenkästchen auf einem Blatt Papier. Dann musst du doch nur nachschauen, ob in einer bestimmten Gitterzelle etwas drin ist oder nicht, also deine Welt ist quasi ein 2D-Array.

De_Struktor

unregistriert

5

16.02.2013, 11:02

also momentan sieht es so aus:


und das mit den 2D - Array ist korrekt, aber jede abfrage scheint mir zu hoher codeaufwand zu sein, was nicht heißen soll, das ich
coding faul bin^^^, sondern nur es recht klein halten will imbezug auf den Code.
Ich dachte mir, der ansatz von sacaldur gefallen hat und ich verstehe ja wie das ganze logisch abgefragt wird, nur will ich code produzieren, den ich paar tage später, wenn ich ihn mir durch lese, auch verstehe :)^^.

die listenabfrage, wäre eine möglichkeit neheme ich an.
»De_Struktor« hat folgendes Bild angehängt:
  • Debug_Bild.JPG

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

6

16.02.2013, 11:05

nein, auch in den alten Bomberman-Teilen waren nicht alle Objekte entsprechend angeordnet
Bomben, Wände und Items schon, der Spieler und die Gegner allerdings nicht

man kann den Ansatz mit dem 2D-Array verwenden, solange die Objekte auch tatsächlich einem Feld zugeordnet werden können
knifflig würde es dann werden, wenn man größere Objekte hat, die bspw. 3x3 Felder groß sind (bei den SNES-Bombermans gab es meines Wissens ein paar Bossgegner, auf die das zutrifft)

ich denke, dass es für den Threadersteller eher weniger wichtig ist, von Anfang an den bestmöglichen Weg zu gehen, solange er überhaupt einen funktionierenden Weg nimmt
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

De_Struktor

unregistriert

7

16.02.2013, 19:06

also es ist wirklich ein hartes stück kuchen für ein anfänger^^ aber ich werde nicht aufgeben, sowas fördert einfach die kompetenz....

und danke für euren zahlreichen vorschläge

Wirago

Alter Hase

Beiträge: 1 193

Wohnort: Stockerau

Beruf: CRM Application Manager

  • Private Nachricht senden

8

16.02.2013, 19:13

also es ist wirklich ein hartes stück kuchen für ein anfänger^^ aber ich werde nicht aufgeben, sowas fördert einfach die kompetenz....

und danke für euren zahlreichen vorschläge


Das ist es allerdings. Gut, dass du das erkennst und nicht blauäugig in die Sache gehst.
Ich finde Spieleprogrammierung generell aufwändiger und weit komplexer als gewöhnliche Anwendungsentwicklung, aber dafür macht es mehr Spaß ;)

KeksX

Community-Fossil

Beiträge: 2 107

Beruf: Game Designer

  • Private Nachricht senden

9

17.02.2013, 00:29

also es ist wirklich ein hartes stück kuchen für ein anfänger^^ aber ich werde nicht aufgeben, sowas fördert einfach die kompetenz....

und danke für euren zahlreichen vorschläge


Mal dir das Feld doch einfach mal auf und überprüf "händisch" auf Kollision. Wann muss ich auf welche Felder achten? Was muss ich dann genau überprüfen? Wenn du dir diese Fragen beantwortest kannst du sie fast 1:1 in Code übersetzen. Das Ergebnis wird nicht immer das optimalste sein aber in den meisten Fällen funktionieren. Dein Ziel sollte es derzeit nicht sein, kurzen, super cleveren Code zu schreiben, sondern funktionierenden Code mit einer gewissen Logik dahinter, die du auch verstehst.

Kürzen kannst du dann später immernoch ;)
WIP Website: kevinheese.de

De_Struktor

unregistriert

10

17.02.2013, 13:06

kennt aber jemand die methode und ihre parameter : rectangle.intersect( ref rectangle 1, ref rectangle1, out rectangle 3);

versuche damit die kollision zu prüfen, jedoch spuckt er mir immer: "beinhaltet ungültige Argumente" aus.

Werbeanzeige