Jump'n'Run Kollision
Übersicht

Till P.Betreff: Jump'n'Run Kollision |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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! ![]() |
||
flohrian |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() ![]() 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 ![]() |
||
![]() |
Surat |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group