Jump'n'run collision
Übersicht

![]() |
ToeBBetreff: Jump'n'run collision |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habe ja für mein spiel Castle war eine Jump'n'run collision. Nur leider rukelt der spieler manchmal auf und ab (das merkt man nicht gleich, aber wenn die map sich dem spieler anpasst, dann rukelt die ganze landschaft -> sieht scheiße aus ^^)
Hier mal meine Collísion : Code: [AUSKLAPPEN] For xx = 0 To MapWidth-1
For yy = 0 To MapHeight-1 If map(xx,yy) > 0 If psy > 0 If RectsOverlap(xx*32,Map_Y+yy*32,32,32,player_x(UDP_SelvID)-10,player_y(UDP_SelvID)+12,20,psy) Then player_y(UDP_SelvID) = player_y(UDP_SelvID) - (psy / 2.0) * LoopTime Jump = 0 psy = 0 EndIf EndIf If psy < 0 If RectsOverlap(xx*32,Map_Y+yy*32,32,32,player_x(UDP_SelvID)-10,player_y(UDP_SelvID)-12+psy,20,psy) Then player_y(UDP_SelvID) = player_y(UDP_SelvID) + (psy /2.0) * LoopTime psy = 0 EndIf EndIf If RectsOverlap(xx*32,Map_Y+yy*32,32,32,player_x(UDP_SelvID)+12,player_y(UDP_SelvID)-11,2,22) Then player_x(UDP_SelvID) = player_x(UDP_SelvID) - 2 * LoopTime EndIf If RectsOverlap(xx*32,Map_Y+yy*32,32,32,player_x(UDP_SelvID)-12,player_y(UDP_SelvID)-11,2,22) Then player_x(UDP_SelvID) = player_x(UDP_SelvID) + 2 * LoopTime EndIf EndIf Next Next Ich mach das so das der Spieler, wenn er Kollidiert, einfach anhand seiner speed variable zurückgesetzt wird. Kennt einer von euch ein bessers verfahren (und ich will keine 3D-Collisions engine ![]() mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
Kruemelator |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wenn der dahin zurück gesetzt wird wo er vorher war, dann fällt er ja die ganze Zeit.
Mach ihn wenn er kollidiert ist einfach langsamer. Sollte funktionieren, oder du ermittels wie tief er eindringt. |
||
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
nein wenn er um den wert, um den er vorher bewegt wurde, wieder zurückgesetzt wird, bleibt die Position ja gleich ![]() mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
Kruemelator |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das meinte ich ja. ![]() Des wegen solltest du ihn ja langsamer machen. Vielleicht halbieren oder so, musst du ausprobieren was am besten passt. EDIT: Also dann langsamer machen wenn er kollidiert. |
||
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
nein die collision funtz ja, nur die rukelt manchmal ^^
mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
Kruemelator |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wenn die Kollisions ruckelt dann funktioniert sie ja nicht richtig. Wann ruckelt sie den? | ||
![]() |
kreisman |
![]() Antworten mit Zitat ![]() |
---|---|---|
Gugg dir dieses Tutorial mal an.
http://jnrdev.72dpiarmy.com/ |
||
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das tut habe ich verstanden... einfach NACH der bewegung seperat x und y auf kollision zu beiden seiten prüfen und dann den wert zurücksetzten.
thx ^^ werds morgen mal ausprobieren ![]() mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sry für doppelpost, aber hab ein neues Problem ...
Nämlich funtz die Kollision net... Was mache ich falsch ? Code: [AUSKLAPPEN] For xx = 0 To MapWidth-1
For yy = 0 To MapHeight-1 If map(xx,yy) > 0 If RectsOverlap(player_x(UDP_SelvID)-12,player_Y(UDP_SelvID)-12,24,24,xx*32,Map_Y+yy*32,32,32) Then If RectsOverlap(player_x(UDP_SelvID)-11,player_y(UDP_SelvID)+12,22,1,xx*32,Map_Y+yy*32,32,32) Then diff_y = (player_y(UDP_SelvID)+12) - (Map_Y+yy * 32) psy = 0 Jump = 0 EndIf If RectsOverlap(player_x(UDP_SelvID)-11,player_y(UDP_SelvID)-12,22,1,xx*32,Map_Y+yy*32,32,32) Then diff_y = (player_y(UDP_SelvID)-12) - (Map_Y+yy*32+32) psy = 0 Jump = 0 EndIf If RectsOverlap(player_x(UDP_SelvID)+12,player_y(UDP_SelvID)-11,1,22,xx*32,Map_Y+yy*32,32,32) Then diff_x = (player_x(UDP_SelvID)+12) - (xx*32) EndIf If RectsOverlap(player_x(UDP_SelvID)-12,player_y(UDP_SelvID)-11,1,22,xx*32,Map_Y+yy*32,32,32) Then diff_x = (player_x(UDP_SelvID)-12) - (xx*32+32) EndIf DebugLog diff_x+";"+diff_Y player_y(UDP_SelvID) = player_y(UDP_SelvID) - diff_y player_x(UDP_SelvID) = player_x(UDP_SelvID) - diff_x EndIf EndIf Next Next Diff_x + Diff_y sind die "Überschreitungen" der felder... Das funtz alles super, aber nur wenn ich eine achsenabfrage weglasse (also entweder nur x oder nur y) Ich versteh das nicht ... mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
coolo |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich weiß jetzt nicht warum dein Code nicht funktioniert, aber ich kann dir meine Vorgehensweise zeigen, welche ich immer bei Pixel*Tile Kollisionen verwende:
Als erstes mache ich mir eine Move() Funktion welche den Spieler/Gegner bewegt, welche schaut ob der Spieler nach dem Bewegen eine Kollision zu vermelden hat, und wenn nicht gib True zurück und wenn schon gib False zurück. Sobald Die Überprüfung Wahr ist, bewege den Spieler. Ich würde das garnicht später machen, wenn man Float Variablen verwendet kann es zu Ungenauigkeiten kommen, auch Ints sind nicht 100%ig sicher ![]() Wenns dir nicht geholfen hat tut mir leid ![]() |
||
http://programming-with-design.at/ <-- Der Preis ist heiß!
That's no bug, that's my project! "Eigenzitate sind nur was für Deppen" -Eigenzitat |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich finde das macht jetzt da keinen sinn, weil wenn er prüfen soll, ob der nach dem bewegen eine Kollision vermerkt, und wenn ja, einfach nicht bewegen, dann kann es sein das der Player auch mal in der Luft stehen bleibt...
Aber danke trotzdem ![]() mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
coolo |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dann steht der Player maximal 1 Pixel (Es sei denn du verwendest ne andere Einheit) über dem Grund, außerdem könntest du sobald der Spieler mit dem Boden (fast) kollidiert einfach die Player Grafik 1 Pixel nach unten setzen ![]() Auf jedenfall viel Glück mit deinem Spiel . |
||
http://programming-with-design.at/ <-- Der Preis ist heiß!
That's no bug, that's my project! "Eigenzitate sind nur was für Deppen" -Eigenzitat |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group