Method Draw Cannot be accessed from there?
Monkey Forums/Monkey Programming/Method Draw Cannot be accessed from there?
| ||
I have been using his Diddy Framework and trying to make simple pong game as I try draw ball on screen when testing ball that bounce round the screen. The Background, music and sound will be change when come to finishing the pong game :) ' Strict code mode please Strict ' The modules Import diddy ' Starting Point Function Main:Int() game = New MyGame() End ' Screens in the game Global titleScreen:Screen = New TitleScreen() Global gameScreen:Screen = New GameScreen() ' The Game Class MyGame Extends DiddyApp Method OnCreate:Int() Super.OnCreate() ' Set the font SetFont(LoadImage("graphics/font_16.png",16,16,64)) LoadImages() LoadSounds() titleScreen.PreStart() Return 0 End '*********************** '* Load Images '*********************** Method LoadImages:Void() ' create tmpImage for animations Local tmpImage:Image images.Load("galaxy2.png", "", False) images.Load("BAT.png","",False) images.Load("Ball.png","",False) End '*********************** '* Load Sounds '*********************** Method LoadSounds:Void() 'sounds.Load("lazer") 'sounds.Load("boom3") End End Class TitleScreen Extends Screen Field background:GameImage Method New() name = "Title" End Method Start:Void() background = game.images.Find("galaxy2") 'game.MusicPlay("ShowYourMoves.ogg", True) game.screenFade.Start(50, False) End Method Render:Void() DrawImage background.image, 0, 0 Scale 2, 2 DrawText "P O N G", SCREEN_WIDTH2 / 2, (SCREEN_HEIGHT2-30) / 2, 0.5, 0.5 Scale .5, .5 DrawText "SPACE TO PLAY!", SCREEN_WIDTH2, SCREEN_HEIGHT2 + 60, 0.5, 0.5 End Method Update:Void() If KeyHit(KEY_SPACE) Or MouseHit(0) game.screenFade.Start(50, True, True, True) game.nextScreen = gameScreen End If KeyHit(KEY_ESCAPE) game.screenFade.Start(50, True, True, True) game.nextScreen = game.exitScreen End End End Class GameScreen Extends Screen Field background:GameImage Field player:Player Field ball:Ball Field lifeImage:GameImage Method New() name = "Game Screen" End Method Start:Void() background = game.images.Find("galaxy2") Local gi:GameImage = game.images.Find("Bat") Local gi2:GameImage = game.images.Find("Ball") player = New Player(gi, SCREEN_WIDTH2, SCREEN_HEIGHT - gi.h) ball = New Ball(gi2, 10, 10) StartLevel() 'game.MusicPlay("SpaceFighterLoop.ogg", True) 'start fade game.screenFade.Start(50, False, True, True) End Method StartLevel:Void(level% = 1) Local B_SpeedX:Int,B_SpeedY:Int B_SpeedX=1 B_SpeedY=1 End Method Render:Void() DrawImage background.image, 0, 0 player.Draw() Ball.Draw() DrawGUI() End Method DrawGUI:Void() DrawText "SCORE: "+ player.score, 0, 0 End Method Update:Void() player.Update() Ball.Update() If KeyHit(KEY_ESCAPE) game.screenFade.Start(50, True, True, True) game.nextScreen = titleScreen End End End Class Ball Extends Sprite Field X:Int Field Y:Int Field B_SpeedX:Int Field B_SpeedY:Int Method New(img:GameImage, x#, y#) Super.New(img, x, y) X = 50 Y = 50 End Method Update:Void() End End Class Player Extends Sprite Field score:Int Field lives:Int Method New(img:GameImage, x#, y#) Super.New(img, x, y) score = 0 lives = 3 speedX = 1 maxXSpeed = 5 End Method Update:Void() If KeyDown(KEY_LEFT) Self.dx-=Self.speedX Else If KeyDown(KEY_RIGHT) Self.dx+=Self.speedX End If dx > Self.maxXSpeed dx = Self.maxXSpeed End If dx < -Self.maxXSpeed dx = -Self.maxXSpeed End Self.Move() ' limit the player to the screen If x <= -25 x = -25 End If x > 440 x = 440 End End End |
| ||
It's because the image field in GameImage is set to private. Wondering about this already. Came to the conclusion that the guys have something to hide... Will better wear my aluminum cap tonight. |
| ||
how do I set Gameimage is not set to private? the guys have something to hide... Will better wear my aluminum cap tonight. EH!? |
| ||
@Hotshot, try this: The issue is that you were accessing Ball not ball... remember Monkey is case sensitive. Method Render:Void() DrawImage background.image, 0, 0 player.Draw() ball.Draw() '<----- DrawGUI() End Monkey spat the error, because it is not static. @Volker - EH!? |
| ||
The issue is that you were accessing Ball not ball... remember Monkey is case sensitive. I see.... thanks therevills :) |
| ||
I cant seem to move the ball....do you know why?' Strict code mode please Strict ' The modules Import diddy ' Starting Point Function Main:Int() game = New MyGame() End ' Screens in the game Global titleScreen:Screen = New TitleScreen() Global gameScreen:Screen = New GameScreen() Global X:Int,Y:Int Global B_SpeedX:Int,B_SpeedY:Int ' The Game Class MyGame Extends DiddyApp Method OnCreate:Int() Super.OnCreate() ' Set the font SetFont(LoadImage("graphics/font_16.png",16,16,64)) LoadImages() LoadSounds() titleScreen.PreStart() Return 0 End '*********************** '* Load Images '*********************** Method LoadImages:Void() ' create tmpImage for animations Local tmpImage:Image images.Load("galaxy2.png", "", False) images.Load("BAT.png","",False) images.Load("BALL.png","",False) End '*********************** '* Load Sounds '*********************** Method LoadSounds:Void() 'sounds.Load("lazer") 'sounds.Load("boom3") End End Class TitleScreen Extends Screen Field background:GameImage Method New() name = "Title" End Method Start:Void() background = game.images.Find("galaxy2") 'game.MusicPlay("ShowYourMoves.ogg", True) game.screenFade.Start(50, False) End Method Render:Void() DrawImage background.image, 0, 0 Scale 2, 2 DrawText "P O N G", SCREEN_WIDTH2 / 2, (SCREEN_HEIGHT2-30) / 2, 0.5, 0.5 Scale .5, .5 DrawText "SPACE TO PLAY!", SCREEN_WIDTH2, SCREEN_HEIGHT2 + 60, 0.5, 0.5 End Method Update:Void() If KeyHit(KEY_SPACE) Or MouseHit(0) game.screenFade.Start(50, True, True, True) game.nextScreen = gameScreen End If KeyHit(KEY_ESCAPE) game.screenFade.Start(50, True, True, True) game.nextScreen = game.exitScreen End End End Class GameScreen Extends Screen Field background:GameImage Field player:Player Field ball:Ball Field lifeImage:GameImage Method New() name = "Game Screen" End Method Start:Void() background = game.images.Find("galaxy2") Local gi:GameImage = game.images.Find("BAT") Local gi2:GameImage = game.images.Find("BALL") player = New Player(gi, SCREEN_WIDTH2, SCREEN_HEIGHT - gi.h) ball = New Ball(gi2, 10, 10) StartLevel() 'game.MusicPlay("SpaceFighterLoop.ogg", True) 'start fade game.screenFade.Start(50, False, True, True) End Method StartLevel:Void(level% = 1) B_SpeedX=1 B_SpeedY=1 End Method Render:Void() DrawImage background.image, 0, 0 player.Draw() ball.Draw() DrawGUI() End Method DrawGUI:Void() DrawText "SCORE: "+ player.score, 0, 0 End Method Update:Void() player.Update() ball.Update() If KeyHit(KEY_ESCAPE) game.screenFade.Start(50, True, True, True) game.nextScreen = titleScreen End End End Class Ball Extends Sprite Field X:Int Field Y:Int Field B_SpeedX:Int Field B_SpeedY:Int Method New(img:GameImage, x#, y#) Super.New(img, x, y) X = 50 Y = 50 End Method Update:Void() X=X+B_SpeedX Y=Y+B_SpeedY ' IF THE BALL HIT ON RIGHT SIDE THEN LET BOUNCE TO THE LEFT :) If X>640 B_SpeedX=-1 Endif 'IF THE BALL HIT ON LEFT SIDE THEN LET BOUNCE TO THE RIGHT If X<0 B_SpeedX=+1 Endif End End Class Player Extends Sprite Field score:Int Field lives:Int Method New(img:GameImage, x#, y#) Super.New(img, x, y) score = 0 lives = 3 speedX = 1 maxXSpeed = 5 End Method Update:Void() If KeyDown(KEY_LEFT) Self.dx-=Self.speedX Else If KeyDown(KEY_RIGHT) Self.dx+=Self.speedX End If dx > Self.maxXSpeed dx = Self.maxXSpeed End If dx < -Self.maxXSpeed dx = -Self.maxXSpeed End Self.Move() ' limit the player to the screen '**************************************** If x <= -25 x = -25 End If x > 440 x = 440 End '**************************************** End End What is the Best IDE for Monkey? |
| ||
You've defined B_SpeedX and Y both as fields of the ball and as globals. You're setting the globals and reading the fields. |
| ||
Sorry guys, looks like I'm disorganized. But I could swear, that I once tried to access the GameImage.image.width(), which failed because image was set to private. Curious. [quote]EH!? [quote] Just joking. Failed. Forget about this. |
| ||
@Hotshot - you are creating your own X and Y, the sprites have their own x and y which it uses to draw the images. Also in sprite there is dx and dy so you dont need B_SpeedX or B_SpeedY. Also can you wrap your code in a codebox please? @Volker - strange... |