Spieler/Gegner Kollisionen auf einer Tilemap
Übersicht

GastBetreff: Spieler/Gegner Kollisionen auf einer Tilemap |
![]() Antworten mit Zitat |
|
---|---|---|
Hi,
Ich versuche mich gerade an einem einfachen Panzerspiel mit Draufsicht. Die Kollisionen Spieler-Wände und Gegner-Wände funktionieren super nach folgendem Muster: ;runter if keydown(208) and map(x,y+1)=0 then playery=playery+... usw, ihr wisst was ich meine ![]() Wenn aber 2 Panzer nach dem Muster miteinander kollidierensollen, dann fahren sie manchmal ducrheinander durch, vor allem wenn sie genau entgegengesetzte Richtungen haben - ich hab den Eindruck, dass meine tilebasierte Kollisionsmethode nicht schnell genug für bewegte Objekte ist. Hat jemand einen besseren Ansatz? Grüße, Kungfista -------------------------------------- http://www.blitzcoder.com/cgi-...omments=no |
||
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
sind die Panzer als tile eingezeichnet oder malst du die als Image drüber?
und wie fragst du jetzt die Kollision der Panzer ab ich würde das etwa so umsetzten panzer versetzten if imagescol... panzer wieder zurücksetzten end if flip |
||
[BB2D | BB3D | BB+]
|
Omenaton_2 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wenn du Tiles hast, dann hast du auch eine Art Feldsystem, nehme ich an.
Wenn das so ist, dann vergiß die Methode zu prüfen ob Grafiken (ImmageCollide, etc) kollidieren oder nicht. Der beste und zukunfstweisender Weg ist die Koordinaten aller Objekte zu prüfen. Wenn der Panzer ein Feld nach links fahren soll, dann checkst du, ob auf dem Feld das Panzer_X - 1 liegt befahrbares Tile ist und ob kein anderes bewegliches Objekt die gleiche Koordinaten hat. Dann darfst du hinfahren. Erfasse alle Werte aller beweglichen Objekten in Types. |
||
![]() |
Shogo |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hatte so ein problem auch schon mal. Bei mir war es so
wenn z.B. Panzer1 auf x=10 y=0 steht und Panzer2 auf x=11 y=0 und sie sich aufeinander zubewegten war dann Panzer1 auf x=11 y=0 Panzer2 auf x=10 y=0 so das nie eine Kollision statfand. Hoffe ich konnte es gut genug erklären. Shogo |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
der von Shogo beschriebene Fall kann allerdings nur bei einem gleichzeitigen versetzen aller Einheiten auftreten.
Wenn du vor jeder Versetzung auf eine Kollision im potentiellen Zielfeld testest, müsste es klappen. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
Gast |
![]() Antworten mit Zitat |
|
---|---|---|
Ja, das wär ne Lösung, aber das geht nur, wenn alle Einheiten sich tatsächlich "tile-weise" bewegen, d.h. von Feld zu Feld springen, oder? Was mach ich denn bei pixelgenauen Bewegungen? Wenn ein Panzer z.B. zwischen zwei tiles ist und sein Mittelpunkt (bei MidHandle) gerade auf der nächsten Tile ist, dann könnte ihm jemand "ins Heck" fahren, weil er die betroffene Tile ja offiziell gerade verlassen hat... ![]() |
||
Omenaton_2 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Zu diesem Problem "wenn Einheit sich gerade zwischen 2 Felder befindet..":
Ich habe dieses Problem so gelöst: Ich habe eine zusätzliche Map (als Bank, nur intern, also nicht sichtbar) die ich "FeldreservierungsMap" nenne. Wenn eine Einheit von Feld A nach B (Nachbarfelder) fahren will dann wird erst gechecked, ob das Zielfeld total frei und befahrbar ist oder nicht. Auch in der FeldreservierungsMap wird geguckt, ob das Feld da auch frei ist. Wenn das Feld total frei ist, dann wird das Zielfeld in der FeldreservierungsMap als reserviert markiert und die Einheit beginnt ihre Bewegung. Die Einheit bleibt also offiziell noch auf dem Feld von wo aus sie kommt, hält aber auch das Zielfeld "reserviert", so daß keine andere dahin fahren kann. Nach Ankunft auf dem Zielfeld wird das Feld in der ReservierungsMap wieder freigegeben und die Aufenthaltskoordinaten der Einheit werden offiziell auf das neue Feld gesetzt. So funktioniert es bei mir zufriedestellend. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group