Algorithmen zur Kollisionsabfrage

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

4pac

Betreff: Algorithmen zur Kollisionsabfrage

BeitragDi, Apr 20, 2004 10:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi liebe Coderz!

Für mein aktuelles Projekt "Swarms" setze ich mich gerade mit alternativen 2D-Kollisionsabfragen (Alternativen zu ImagesCollide) auseinander.

Ich arbeite derzeit mit einer Routine, die an 4 Eckpunkten um den Spieler herum die Hintergrundfarbe abfragt. Das geht recht schnell, aber wenn man gerade mit der rechten Pobacke, wo keine Abfrage stattfindet, an eine Wandecke läuft, kommt es vor daß der Spieler ein Stück in die Wand reinläuft.

Mit was für Kollisionsabfragen arbeitet Ihr denn so?

Viele Grüße,
Thomas
 

Dreamora

BeitragDi, Apr 20, 2004 11:00
Antworten mit Zitat
Benutzer-Profile anzeigen
da man in 2D ja normalerweise quadratische Grafiken nutzt, habe ich bis anhin für solche Zwecke rein mit mathematischen Kollisionen gearbeitet. Allerdings muss ich sagen, dass ich auch noch nie etwas in 2D gemacht hab, was eine "kompliziertere" Kollision benötigt hätte. ( Breakout und Tetrisklon bekommt man so hin )

General Alex

BeitragDi, Apr 20, 2004 11:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
da man in 2D ja normalerweise quadratische Grafiken nutzt

Bist du dir sicher? Es gibt ja vielleicht auch noch die "unsichtbare" Farbe. Dann ist die Grafik nicht mehr quadratisch. Ausserdem bin ich mir sicher, dass du mit "quadratisch" "rechteckig" meinst.
 

BIG BUG

BeitragDi, Apr 20, 2004 11:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Für Deinen Fall wäre auch der Befehl IMAGERECTCOLLIDE geignet.
Wenn du weiterhin mit ReadPixel(Fast) arbeitest, muss der Abstand der einzelnen Kollisionspunkte kleiner als die dünnste Mauer sein. Dann kann es auch keine Überschneidungen geben.

z.B.
Code: [AUSKLAPPEN]

Kollisionsabfrage:
xooxoox
ooooooo
xooooox
ooooooo
xooxoox

kleinst mögliches Mauerelement:
xxx
xxx

B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final)

BladeRunner

Moderator

BeitragDi, Apr 20, 2004 11:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Sorry BigBug, aber grade in deinem Fall wäre Die Kolliabfrage grörer als das Mauerstück....

wenn, dann so:
Code: [AUSKLAPPEN]
Kollisionsabfrage:
xooxoox
ooooooo
xooxoox
ooooooo
xooxoox

kleinst mögliches Mauerelement:
xxx
xxx
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
 

Dreamora

BeitragDi, Apr 20, 2004 11:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Alex: mag schon sein aber für spiele wie Pong und Tetris benötigt man diese zusätzliche genauigkeit net.
Wenn ich sie benötigen würde, würde ich einfach die direkten Befehle für PixelPerfekt Kolli nehmen nachdem der mathematische mir sagt, dass potentiell eine Kollision bestehen kann.

4pac

BeitragDi, Apr 20, 2004 12:50
Antworten mit Zitat
Benutzer-Profile anzeigen
@ BIG BUG - Das erscheint mir für meinen Fall am cleversten. Ich werde mehr Abfragepunkte setzen und diese insgesamt mal gründlich nachjustieren. ImageRectCollide ist hier nicht gut, weil die Level jeweils aus einer einzigen Grafik bestehen und eine Collision von daher eigentlich ständig gegeben ist. Jedenfalls hab ich´s nicht so hinbekommen, daß es funzt, mein Codekonstrukt ist insgesamt schon ziemlich auf die ReadPixel-Methode abgepasst.
Die Items hingegen sind separat reingesetzt und werden in der Tat mit ImageRectCollide abgefragt, und da funzt das sehr gut.

Viele Grüße,
Thomas
 

BIG BUG

BeitragDi, Apr 20, 2004 13:04
Antworten mit Zitat
Benutzer-Profile anzeigen
@4Pac
Mit ImageRectCollide meinte ich eigentlich den Spieler als Rect zu definieren und das Spielfeld als Image Smile .

@BladeRunner
Kommt hier drauf an, wie schnell die Bewegungen sind. Ich bin jetzt von max. 2-Pixelsprüngen ausgegangen. Bei größeren Sprüngen sind natürlich noch innere Abfragepunkte notwendig. Danke für den Hinweis.
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final)

4pac

BeitragDi, Apr 20, 2004 13:06
Antworten mit Zitat
Benutzer-Profile anzeigen
@ BIG BUG - Nee, is klar, nich....so hab ich das auch gemacht. Aber der Spieler ist z.B. eine andere Grafik je nachdem in welche Richtung er sich bewegt, und überhaupt ist das mit ReadPixel logischer für mich, so ich die Bewegungen des Spielers gecodet habe...

Markus2

BeitragMi, Apr 21, 2004 17:47
Antworten mit Zitat
Benutzer-Profile anzeigen
@4pac

Das Problem hatte ich auch mal .
Versuche mal x und y bewegung nach einander zu testen und wenn
da eine Wand kommt stellst du die x oder y pos. wieder her.
Die Wände hatte ich als sw/ws Map im Speicher .
Wie ich das genau gelößt habe müßte ich jetzt nachgucken
weil ich das mal auf dem Amiga in BB gemacht hatte .

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group