A little example I threw together last night. Been using it for a while thought others may like it.
SETSCREEN 640,480,0
LIMITFPS 60
GLOBAL Walls = 1
LOADSPRITE "Walls.png",Walls
TYPE BallType
Image
Speed
X
Y
US
RS
DS
LS
ENDTYPE
GLOBAL Ball AS BallType
Ball.Image = 2
LOADSPRITE "Ball.png",Ball.Image
Ball.Speed = 2
Ball.X = 164
Ball.Y = 124
Ball.US = 0
Ball.RS = 0
Ball.DS = 0
Ball.LS = 0
Main:
BLACKSCREEN
Movement()
Collision()
Draw()
SHOWSCREEN
GOTO Main
FUNCTION Movement:
IF KEY(200) AND Ball.US = 1
Ball.Y = Ball.Y - Ball.Speed
ENDIF
IF KEY(205) AND Ball.RS = 1
Ball.X = Ball.X + Ball.Speed
ENDIF
IF KEY(208) AND Ball.DS = 1
Ball.Y = Ball.Y + Ball.Speed
ENDIF
IF KEY(203) AND Ball.LS = 1
Ball.X = Ball.X - Ball.Speed
ENDIF
ENDFUNCTION
FUNCTION Collision:
FOR A = 0 TO Ball.Speed
IF SPRCOLL(Ball.Image,Ball.X,Ball.Y - Ball.Speed,Walls,0,0)
Ball.US = 0
Ball.Y = Ball.Y - (A - 1)
ELSE
Ball.US = 1
ENDIF
IF SPRCOLL(Ball.Image,Ball.X + Ball.Speed,Ball.Y,Walls,0,0)
Ball.RS = 0
Ball.X = Ball.X + (A - 1)
ELSE
Ball.RS = 1
ENDIF
IF SPRCOLL(Ball.Image,Ball.X,Ball.Y + Ball.Speed,Walls,0,0)
Ball.DS = 0
Ball.Y = Ball.Y + (A - 1)
ELSE
Ball.DS = 1
ENDIF
IF SPRCOLL(Ball.Image,Ball.X - Ball.Speed,Ball.Y,Walls,0,0)
Ball.LS = 0
Ball.X = Ball.X - (A - 1)
ELSE
Ball.LS = 1
ENDIF
NEXT
ENDFUNCTION
FUNCTION Draw:
DRAWSPRITE Walls,0,0
DRAWSPRITE Ball.Image,Ball.X,Ball.Y
ENDFUNCTION
(http://img145.imageshack.us/img145/6396/ballv.png)
(http://img684.imageshack.us/img684/987/walls.png)
:good:
So sorry the collision function should look like this.
FUNCTION Collision:
FOR A = 0 TO Ball.Speed
IF SPRCOLL(Ball.Image,Ball.X,Ball.Y - (A + 1),WallCollision,0,0)
Ball.US = 0
Ball.Y = Ball.Y - (A - 1)
ELSE
Ball.US = 1
ENDIF
IF SPRCOLL(Ball.Image,Ball.X + (A + 1),Ball.Y,WallCollision,0,0)
Ball.RS = 0
Ball.X = Ball.X + (A - 1)
ELSE
Ball.RS = 1
ENDIF
IF SPRCOLL(Ball.Image,Ball.X,Ball.Y + (A + 1),WallCollision,0,0)
Ball.DS = 0
Ball.Y = Ball.Y + (A - 1)
ELSE
Ball.DS = 1
ENDIF
IF SPRCOLL(Ball.Image,Ball.X - (A + 1),Ball.Y,WallCollision,0,0)
Ball.LS = 0
Ball.X = Ball.X - (A - 1)
ELSE
Ball.LS = 1
ENDIF
NEXT
ENDFUNCTION
Edit: I also found a bug using diagonal movement, I'll work on this tonight and see if I can't get a fix soon.