Kollision auf Tilemap [Problem gelöst]
Übersicht

CaeSarBetreff: Kollision auf Tilemap [Problem gelöst] |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Bor da_poller du bist einfach genial, klappt wunderbar | ||
da_poller |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ich bin nciht genial ^^ ich tu nur so... ps.. pn mcih mal fals ist kannste icq mal melden... | ||
HyDr0x |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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! |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group