Jump'n'run collision

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

ToeB

Betreff: Jump'n'run collision

BeitragDo, Mai 14, 2009 18:07
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink )

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

BeitragDo, Mai 14, 2009 19:33
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Mai 14, 2009 21:10
Antworten mit Zitat
Benutzer-Profile anzeigen
nein wenn er um den wert, um den er vorher bewegt wurde, wieder zurückgesetzt wird, bleibt die Position ja gleich Wink...


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

BeitragDo, Mai 14, 2009 21:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Das meinte ich ja. Laughing
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

BeitragDo, Mai 14, 2009 21:35
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Mai 14, 2009 21:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn die Kollisions ruckelt dann funktioniert sie ja nicht richtig. Wann ruckelt sie den?

kreisman

BeitragDo, Mai 14, 2009 23:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Gugg dir dieses Tutorial mal an.
http://jnrdev.72dpiarmy.com/

ToeB

BeitragFr, Mai 15, 2009 8:07
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink

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

BeitragDo, Mai 21, 2009 13:25
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Mai 21, 2009 14:06
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink.

Wenns dir nicht geholfen hat tut mir leid Wink Kann ja für nen anderen nützlich sein .
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

BeitragDo, Mai 21, 2009 15:21
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Very Happy

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

BeitragDo, Mai 21, 2009 18:34
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink.

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

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group