Monkey Coder – XY Bouncing Ball
*********************
X POSITION MANAGEMENT
*********************
1. Notice:
———-
I have created on Class yourgame Extends App a new variable:
The code:
Field bXSpeed:Float = 3.0 ‘ X Speed (add 3.0 pixel every 1/60 sec)
2. Notice:
———-
I have created the Method BallUpdate:Int() to change the ball position. The ball has to stay inside the canvas. I verify the x position of the ball (bx variable) and I need to invert speed to create the bounce effect
The code:
‘ Update Ball START
Method BallUpdate:Int()
bX += bXSpeed ‘Add the X speed of the ball to its X position every 1/60 sec (frame rate: 60 fps)
If bX < 5.0 Then ' To control left bounce
bX = 5.0 'Set the X position back to 5.0
bXSpeed *= -1 'Inverse the balls X speed
Endif
If bX > 635.0 Then ‘ To control right bounce
bX = 635.0 ‘Set the X position back to 635.0
bXSpeed *= -1 ‘Inverse the balls X speed
Endif
Return True
End
‘ Update Ball END
3. Notice:
———-
Very very Important: I put the BallUpdate() inside Method OnUpdate:Int() to execute BallUpdate().
Without this code the ball does not change its position!!!
The code:
‘ OnUpdate START
Method OnUpdate:Int()
BallUpdate()
Return True
End
‘ OnUpdate END
*********************
Y POSITION MANAGEMENT
*********************
I do the same job for variables “bY” ball Y position and “bYSpeed” ball Y position Speed.
' STEP 1 All games open with this first command Strict #rem Script: pong.monkey Description: it is a remake of an old game! Author: Andrea Tonin #End ' STEP 2 Import framework mojo - it is a 2D framamework to support graphics, sound, input, device events Import mojo ' STEP 3 Creation of Class - yourgame - (we can use the name of the game) ' Class yourgame START ***************************************** Class yourgame Extends App ' Ball Field bX:Float = 320.0 'X pos of the ball in the middle of canvas (canvas size: 640x480) Field bY:Float = 240.0 'Y pos in the middle of the canvas (canvas size: 640x480) Field bXSpeed:Float = 3.0 ' X Speed (add 3.0 every 1/60 sec) Field bYSpeed:Float = 3.0 ' Y Speed (add 3.0 every 1/60 sec) ' STEP 4 Creation of Method OnCreate - OnUpdate - OnRender ' OnCreate START Method OnCreate:Int() SetUpdateRate(60) Return True End ' OnCreate END ' OnUpdate START Method OnUpdate:Int() BallUpdate() Return True End ' OnUpdate END ' Update Ball START Method BallUpdate:Int() bX += bXSpeed 'Add the X speed of the ball to its X position every 1/60 sec (frame rate: 60 fps) bY += bYSpeed 'Add the Y speed of the ball to its Y position every 1/60 sec (frame rate: 60 fps) If bX < 5.0 Then ' To control left bounce bX = 5.0 'Set the X position back to 5.0 bXSpeed *= -1 'Inverse the balls X speed Endif If bX > 635.0 Then ' To control right bounce bX = 635.0 'Set the X position back to 635.0 bXSpeed *= -1 'Inverse the balls X speed Endif If bY > 475.0 Then ' To control bottom bounce bY = 475.0 'Set the Y position back to 635.0 bYSpeed *= -1 'Inverse the balls Y speed Endif If bY < 5.0 Then ' To control top bounce bY = 5.0 'Set the Y position back to 635.0 bYSpeed *= -1 'Inverse the balls Y speed Endif Return True End ' Update Ball END ' OnRender START Method OnRender:Int() Cls 'Clear the canvas each frame DrawCircle(bX, bY, 5) 'Draw the ball with a radius of 5 Return True End ' OnRender END End ' Class yourgame END ******************************************** ' Step 5 Creation of Main function Function Main:Int() ' Create a running istance from our class - the class - yourgame - has been created at STEP 3 New yourgame Return True End