Jump'n'Run Kollision

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Till P.

Betreff: Jump'n'Run Kollision

BeitragSo, Apr 16, 2006 14:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo!

Ich bin auf dem Weg ein Jump'n'Run zu schreiben mal wieder auf ein Hindernis gestoßen: Die Kollision.

Ich bin zwar vertraut mit der Kollision auf einer Tilemap, und habe es deshalb auch versucht so zu lösen, doch das Ergebnis ist nicht zufriedenstellend.
Ich errechne bei dieser Methode das Tile, auf dem der Player sich befindet:
Code: [AUSKLAPPEN]

p\kx=p\x/32
p\ky=p\y/32

Dann überprüfe ich je nach Bewegungsrichtung ob das vor dem Spielerliegende Tile auf der gleichen Höhe liegt und somit eine Kollision verursacht, oder nicht.
Doch was ist jetzt, wenn a) der Player nicht genau 32 Pixel breit ist, oder b) die Tiles der Tilemap nicht genau 32 Pixel breit bzw. hoch sind?
Beispiel: Angenommen ich habe einen Stein, der aber oben abgerundet ist. Dieser ist dann nicht ganz 32 Pixel hoch (der Rest ist transparent). Bei einer Kollision von oben schwebt dann der Player etwas über dem Stein.

Ich habe mal eine Kollisionsüberprüfung mit ReadPixel gesehen. Dabei wird ja überprüft, ob (z.B.) ein Punkt direkt unter dem Player der Hintergrundfarbe entspricht, oder nicht. Doch ist das nicht viel zu langsam, und gibt das nicht Probleme, wenn der Hintergrund, bei dem keine Kollision auftritt nicht einfarbig ist (z.B. Himmel mit Wolken)?

Wenn ihr Erfahrung mit der Kollisionsüberprüfung bei einem Jump'n'Run habt oder Antwort auf meine Fragen wisst, lasst es mich wissen! Ich freue mich über jegliche Hilfestellung!

Danke!
mfG
Till

DerHase

BeitragSo, Apr 16, 2006 14:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab die Kollision so gelöst, dass ich die 9 Tiles um den Spieler auf Kollision prüfe. Dabei würde ich ImagesCollide verwenden, wenn die Tiles nicht genau ein Rechteck ausfüllen. Was noch wichtig sein könnte, ist es den Spieler bei einer Kollision an den Rand eines Tiles zu schieben, sodass die Spielerfigur nich auf ein unbegehbares Gebiet gezeichnet wird.
 

Till P.

BeitragSo, Apr 16, 2006 14:35
Antworten mit Zitat
Benutzer-Profile anzeigen
ist das mit neun mal imagescollide nicht fürchterlich langsam? ich mein, hast du's schonmal auf nem alten rechner probiert? Ich bin nicht der Experte, deswegen belehrt mich, wenn ich falsch liegen sollte! Very Happy
 

flohrian

BeitragSo, Apr 16, 2006 14:58
Antworten mit Zitat
Benutzer-Profile anzeigen
also ich habs ganz ohne tiles gemacht -> JoeyJump Download
9 mal imagescollide is nich unbedingt zu langsam, aktuelle rechner schaffens auf jeden fall.
wenn du mit tiles arbeitest (ich kenn mich nich ganz so gut damit aus) mach die images doch in etwa auf 32*32 pixel (nen stein kann auch so aussehen, dass der wie nen quadrat ist, nur die ecken sind abgerundet (ähnlich wie der "grashügel" in joeyjump))


P.S.: anmerkung zu JoeyJump, damit es kein geflame gibt: ich weiss, das game is noch nicht so super Wink man kann wände hochklettern Wink liegt daran, dass ich den ganzen player als image nehme um die kollision zu prüfen, ob er runter fallen soll, oda nich, wird sich noch ändern.
der sound is auch nich überragend man hört son komisches rauschen (war mein böses, böses aquarium im bg; wollt den pc nich nur für den sound in eine ruhige ecke stellen Wink)

Surat

BeitragSo, Apr 23, 2006 11:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!
Ich orientiere mich an dem guten alten Tut auf www.robsite.de
Items und Gegner werden in Types gepackt und mit Imagescollide
geprüft und die gute alte Tile-Map speichert man dann halt
in einem Dim-Feld mit mehreren Layern.
"DER GRÖßTE FEIND IST IN DEN EIGENEN REIHEN" (Trygonia-Xen's Quest)

AZUON-Beyond the dark life (2%)
SOULS OF DESTINY (23%)

5k41

BeitragSo, Apr 23, 2006 11:52
Antworten mit Zitat
Benutzer-Profile anzeigen
ich würde wenns dir so am speed liegt erstmal prüfen ob denn übrehaupt eine Kollision auftreten kann also vielleciht mit deiner Methode aus dem ersten Post prüfen ob er das tile wo er letzten schleifendurchlauf stand überhaupt verlassen hat dann per ImagesOverlap eine ungenaue Kollision prüfen und wenn die stimmt nochmal per ImagesCollide die pixelgenaue Kollision prüfen, owbei ich denke das das bei 9 tiles auch nicht notwendig ist...

MfG
Projekte:
For a better World - Gesellschaftsspiel ( 100%)

User posted image

Rone

BeitragDi, Apr 25, 2006 1:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

const playerW = imageswidth(player)
const playerH = imagesheight(player)

tileX = Xpos/32
tileY = (Ypos+playerH)/32
if map(tileX,tileY) <> 0 then
     if imagesCollide(player,Xpos,Ypos+playerH,frame,tiles,tileX*32,tileY*32,map(tileX,tileY))
          ;Kollision!!
     endif
endif

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group