flüssige Tilebewegung Problem
Übersicht

Bloxel93Betreff: flüssige Tilebewegung Problem |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo mal wieder,
Ich hab mich jetzt ein wenig mit Tiles beschäftigt und bin nun soweit, dass ein Spieler eine flüssige bewegung von Tile zu Tile macht sofern die entsprechende Taste drückt. Allderdings hab ich da ein kleines Problem und zwar wenn man nach links und nach oben drückt stoppt der spieler nicht im nächsten tile sondern läuft unendlich weiter Hier der Code: Code: [AUSKLAPPEN] xmax=800
ymax=600 Graphics xmax,ymax,32,2 SetBuffer BackBuffer() Dim map(mapx,mapy,1) Const tilesize = 30 Const mapy = 100 Const mapx = 100 Global Spieler =LoadImage("Graphiken\Spieler.bmp") MidHandle Spieler MaskImage Spieler ,255,255,255 Global Erde =LoadImage("Graphiken\Erde.bmp") MidHandle Erde MaskImage Erde ,255,255,255 Global Maus =LoadImage("Graphiken\Maustile.bmp") MidHandle Maus MaskImage Maus ,255,255,255 Global SpielerX = 1, SpielerY = 1 Global frametimer = CreateTimer(60) Repeat WaitTimer frametimer For x=0 To mapx For y=0 To mapy DrawImage Erde, x*tilesize, y*tilesize Next Next DrawImage Spieler, SpielerimgX, SpielerimgY If KeyDown(205) Then MoveSpx = 1 EndIf If KeyDown(203) Then MoveSpx = -1 EndIf If KeyDown(208) Then MoveSpy = 1 EndIf If KeyDown(200) Then MoveSpy = -1 EndIf If MoveSpx = 1 Then SpielerimgX = SpielerimgX+1 If SpielerimgX/tilesize = SpielerX Then SpielerX = SpielerX+1 MoveSpx=0 EndIf ElseIf MoveSpx = -1 Then SpielerimgX = SpielerimgX-1 If SpielerimgX/tilesize = SpielerX Then SpielerX = SpielerX-1 MoveSpx=0 EndIf End If If MoveSpy = 1 Then SpielerimgY = SpielerimgY+1 If SpielerimgY/tilesize = SpielerY Then SpielerY = SpielerY+1 MoveSpy=0 EndIf ElseIf MoveSpy = -1 Then SpielerimgY = SpielerimgY-1 If SpielerimgY/tilesize = SpielerY Then SpielerY = SpielerY-1 MoveSpy=0 EndIf EndIf Text 10, 10, "SpielerX "+SpielerX Text 10, 30, "SpielerY "+SpielerY Text 10, 50, "Movespx" +MoveSpx Text 10, 70, "Movespy" +MoveSpy Flip(0) Cls Until KeyHit(1) End Das Problem ist dass wenn ich einmal links oder einmal oben drücke, dass dann der Movespx bzw "spy nicht mehr auf 0 zurückgeht und beide -1 bleiben. Bei den +1 für unten und rechts funktioniert es. Der Code ist jetzt nicht sehr schön sortiert weil das erstma son test ist. Hoffe ihr könnt mir helfen |
||
feiderehemals "Decelion" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Bin mir nicht sicher, aber:
Code: [AUSKLAPPEN] ElseIf MoveSpx = -1 Then
SpielerimgX = SpielerimgX-1 If SpielerimgX/tilesize = SpielerX Then SpielerX = SpielerX-1 MoveSpx=0 EndIf End If SpielerimgX/tilesize wird ja schon SpielerX, wenn es nach rechts bewegt wird. versuchs mal mit: Code: [AUSKLAPPEN] ElseIf MoveSpx = -1 Then
SpielerimgX = SpielerimgX-1 If SpielerimgX/tilesize = SpielerX-1 Then SpielerX = SpielerX-1 MoveSpx=0 EndIf End If mfg Dece |
||
![]() |
SpionAtomBetreff: Mod |
![]() Antworten mit Zitat ![]() |
---|---|---|
Benutze doch einfach mod![]() Code: [AUSKLAPPEN] If MoveSpx = 1 Then
SpielerimgX = SpielerimgX+1 ;If SpielerimgX/tilesize = SpielerX Then If SpielerimgX Mod tilesize = 0 SpielerX = SpielerX+1 MoveSpx=0 EndIf ElseIf MoveSpx = -1 Then Text 200, 0, "*" SpielerimgX = SpielerimgX-1 If SpielerimgX Mod tilesize = 0 ;If SpielerimgX/tilesize = SpielerX Then SpielerX = SpielerX-1 MoveSpx=0 EndIf End If If MoveSpy = 1 Then SpielerimgY = SpielerimgY+1 ;If SpielerimgY/tilesize = SpielerY Then If SpielerimgY Mod tilesize = 0 SpielerY = SpielerY+1 MoveSpy=0 EndIf ElseIf MoveSpy = -1 Then SpielerimgY = SpielerimgY-1 ;If SpielerimgY/tilesize = SpielerY Then If SpielerimgY Mod tilesize = 0 SpielerY = SpielerY-1 MoveSpy=0 EndIf EndIf |
||
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080 |
Bloxel93 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Decelion danke für den ansatz hat aber leider nix gebracht ... vielen dank Spion atom .. den befehl kannte ich vorher garnicht damit klappt es ... ich würde nur gerne noch verstehen warum das jetzt funktioniert kannst du das vll kurz erklären ? weil so ganz kann ich mit der Definition davon unter Hilfe nichts anfangen | ||
![]() |
SpionAtomBetreff: Erklärungsversuch |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wie die Hilfe schon sagt, Mod![]() Wenn du die Spielerposition durch die Tilegröße dividierst, kann entweder der Rest 0 rauskommen (dann geht die Division glatt auf), oder der Rest liegt zwischen 1 und Tilegröße-1. Und jedesmal wenn Rest 0 rauskommt, ist die Spielerposition gerade auf einem neuen Tile angekommen. Dabei spielt die Richtung, aus der der Spieler kommt, keine Rolle. Code: [AUSKLAPPEN] Tilegröße: 5
SpielerpositionX: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 SpielerpositionX MOD Tilegröße: 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 (also der Rest der Division) man sieht, dass die null regelmäßig mit dem Abstand der Tilegröße auftaucht. Dies kann man sich für seine Tile-Berechnungen zunutze machen. |
||
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080 |
Bloxel93 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ah ok vielen dank ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group