Spieler/Gegner Kollisionen auf einer Tilemap

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Gast

Betreff: Spieler/Gegner Kollisionen auf einer Tilemap

BeitragSa, Jan 31, 2004 14:54
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 Wink

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

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSa, Jan 31, 2004 17:11
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Feb 02, 2004 13:38
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Feb 02, 2004 14:26
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BladeRunner

Moderator

BeitragMo, Feb 02, 2004 16:14
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Feb 02, 2004 23:24
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... Confused
 

Omenaton_2

BeitragDi, Feb 03, 2004 12:30
Antworten mit Zitat
Benutzer-Profile anzeigen
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.

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group