Kollision auf Tilemap [Problem gelöst]

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

CaeSar

Betreff: Kollision auf Tilemap [Problem gelöst]

BeitragDi, Aug 26, 2008 19:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

Ich progge grade en kleines Game, ich habe eine Tilemap und einen Charakter der keine Tilebewegung sondern Pixelbewegung macht. Auf einem Dim Feld habe ich die Kollisionswerte, wenn ich jetzt mit meinen Charakter gegen die Wand laufe funzt alles, bloß ich bleibe in der Wand stecken, nur wenn ih die entgegengesetzte Taste drücke kann ich wieder zurücklaufen, Code:

Code: [AUSKLAPPEN]

If KeyDown(200) Or KeyDown(17) Then
If kolli(ppx/32,ppy/32)=0 And kolli((ppx+32)/32,ppy/32)=0 Then
ppy=ppy-2
scrolly=scrolly-2
EndIf
EndIf

If KeyDown(208) Or KeyDown(31) Then
If kolli(ppx/32,(ppy+32)/32)=0 And kolli((ppx+32)/32,(ppy+32)/32)=0 Then
ppy=ppy+2
scrolly=scrolly+2
EndIf
EndIf

If KeyDown(203) Or KeyDown(30) Then
If kolli(ppx/32,ppy/32)=0 And kolli(ppx/32,(ppy+32)/32)=0 Then
ppx=ppx-2
scrollx=scrollx-2
EndIf
EndIf

If KeyDown(205) Or KeyDown(32) Then
If kolli((ppx+32)/32,ppy/32)=0 And kolli((ppx+32)/32,(ppy+32)/32)=0 Then
ppx=ppx+2
scrollx=scrollx+2
EndIf
EndIf


Wenn ich das so mache, Code:

Code: [AUSKLAPPEN]

If KeyDown(200) Or KeyDown(17) Then
If kolli(ppx/32,ppy/32)=0 And kolli((ppx+32)/32,ppy/32)=0 Then
ppy=ppy-2
scrolly=scrolly-2
Else
ppy=ppy+2
scrolly=scrolly+2
EndIf
EndIf

If KeyDown(208) Or KeyDown(31) Then
If kolli(ppx/32,(ppy+32)/32)=0 And kolli((ppx+32)/32,(ppy+32)/32)=0 Then
ppy=ppy+2
scrolly=scrolly+2
Else
ppy=ppy-2
scrolly=scrolly-2
EndIf
EndIf

If KeyDown(203) Or KeyDown(30) Then
If kolli(ppx/32,ppy/32)=0 And kolli(ppx/32,(ppy+32)/32)=0 Then
ppx=ppx-2
scrollx=scrollx-2
Else
ppx=ppx+2
scrollx=scrollx+2
EndIf
EndIf

If KeyDown(205) Or KeyDown(32) Then
If kolli((ppx+32)/32,ppy/32)=0 And kolli((ppx+32)/32,(ppy+32)/32)=0 Then
ppx=ppx+2
scrollx=scrollx+2
Else
ppx=ppx-2
scrollx=scrollx-2
EndIf
EndIf


dann bleibt er zwar nicht stecken, man sieht aber das ruckeln beim scrollen

mfg (sry falls ich mich zu undeutlich ausgedrückt habe)[/quote]
  • Zuletzt bearbeitet von CaeSar am Mi, Aug 27, 2008 12:01, insgesamt einmal bearbeitet
 

da_poller

BeitragMi, Aug 27, 2008 11:18
Antworten mit Zitat
Benutzer-Profile anzeigen
ich würde es so machen.. den spieler bewegen und fals bei der bewegung eine kollision auftritt wie bewegung rückgängi machen... führt bei mir zu keinem rucken oder steckenbleiben um das zu verdeutlichen hier ein kleiner code aus meinem sammelsurium.:

Code: [AUSKLAPPEN]
If KeyDown(203) Then ;LINKS
      playerT\xpos#=playerT\xpos# + Sin(playerT\winkel#) * geschwindigkeit
      playerT\ypos#=playerT\ypos# - Cos(playerT\winkel#) * geschwindigkeit
      
      
      If kollision(playerT\xpos#,playerT\ypos#,playerT\winkel#)=1 Then
         playerT\xpos#=playerT\xpos# - Sin(playerT\winkel#) * geschwindigkeit
         playerT\ypos#=playerT\ypos# + Cos(playerT\winkel#) * geschwindigkeit
      EndIf
   EndIf


hoffe das hilft weiter.
 

CaeSar

BeitragMi, Aug 27, 2008 12:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Bor da_poller du bist einfach genial, klappt wunderbar
 

da_poller

BeitragMi, Aug 27, 2008 12:29
Antworten mit Zitat
Benutzer-Profile anzeigen
ich bin nciht genial ^^ ich tu nur so... ps.. pn mcih mal fals ist kannste icq mal melden...
 

HyDr0x

BeitragDo, Aug 28, 2008 22:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Frage doch einfach vorher ab ob in dieser Richtung ein Hinderniss ist. Dann sparst du kostbare Rechenleistung und musst nicht erst den vermeindlich falschen Schritt wieder rückgängig machen.
So in Etwa:
Wenn Pfeiltaste Runter gedrückt wird und map(px/32,py/32+1)=Frei dann laufen ansonsten stehenbleiben. Dann gibts kein ruckeln mehr da erst garnicht losgelaufen wird und du kannst trotzdem noch in andere Richtungen laufen. Z.B. indem du jetzt die andere Richtung abfragst:
Wenn Pfeiltaste linksgedrückt wird und map(px/32-1,py/32)=Frei dann laufen ansonsten stehenbleiben.

hoffe das vereinfacht die sache ein wenig.

kriD

BeitragFr, Aug 29, 2008 1:07
Antworten mit Zitat
Benutzer-Profile anzeigen
das funktioniert aber nur solange gut, bis die schnelligleit des spielers über 1 liegt, weil dann der spieler vor der wand stehenbleibt..

lg kriD
Wenn ich du wäre, wäre ich lieber ich!

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group