Naja, also zuerst mal prüfst du ja ob ne taste gedrückt wurde, dass sich der Spieler bewegen soll und wenn da nix im weg steht lässte ihn also an die neue Position laufen.
Code: Alles auswählen
InitSprite()
InitKeyboard()
Procedure Collision(x.f, y.f)
Result = 0
Restore Map
For my=0 To 17
For mx=0 To 24
a.b
Read a
If a = 1
If SpriteCollision(0, Int(x), Int(y), 1, mx*32, my*32)
Result = 1
Break 2
EndIf
EndIf
Next
Next
ProcedureReturn Result
EndProcedure
OpenScreen(800, 600, 32, "Test")
CreateSprite(0, 32, 32)
StartDrawing(SpriteOutput(0))
Box(0, 0, 32, 32, RGB(255, 0, 0))
StopDrawing()
CreateSprite(1, 32, 32)
StartDrawing(SpriteOutput(1))
Box(0, 0, 32, 32, RGB(0, 0, 255))
StopDrawing()
#SPEED = 1.5
X.f = 800/2
Y.f = 600/2
SetFrameRate(20)
Repeat
ExamineKeyboard()
If KeyboardPushed(#PB_Key_Up)
If Collision(X, Y-#SPEED) = 0
Y - #SPEED
EndIf
EndIf
If KeyboardPushed(#PB_Key_Down)
If Collision(X, Y+#SPEED) = 0
Y + #SPEED
EndIf
EndIf
If KeyboardPushed(#PB_Key_Left)
If Collision(X-#SPEED, Y) = 0
X - #SPEED
EndIf
EndIf
If KeyboardPushed(#PB_Key_Right)
If Collision(X+#SPEED, Y) = 0
X + #SPEED
EndIf
EndIf
If KeyboardPushed(#PB_Key_Escape)
Quit = 1
EndIf
ClearScreen(0, 0, 0)
DisplaySprite(1, X, Y)
Restore Map
For my=0 To 17
For mx=0 To 24
a.b
Read a
If a = 1
DisplaySprite(0, mx*32, my*32)
EndIf
Next
Next
FlipBuffers()
Delay(10)
Until Quit = 1
End
DataSection
Map:
Data.b 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
Data.b 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1
Data.b 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1
Data.b 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1
Data.b 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1
Data.b 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1
Data.b 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1
Data.b 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1
Data.b 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1
Data.b 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1
Data.b 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1
Data.b 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1
Data.b 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1
Data.b 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1
Data.b 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1
Data.b 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1
Data.b 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1
Data.b 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
EndDataSection