Forgot how to use methods (again).....

BlitzMax Forums/BlitzMax Programming/Forgot how to use methods (again).....

Captain Wicker (crazy hillbilly)(Posted 2012) [#1]
lol, I have forgotten how to use Types and Methods (for a third time). Can anyone please tell me what I am doing wrong in my code below?
Strict

AppTitle:String = " "

Graphics 800, 600
AutoMidHandle True
SeedRnd(MilliSecs())


Incbin "blue_paddle.jpg"

Global bpad:TImage = LoadImage("incbin::blue_paddle.jpg")

bpad.TPlayerStick = New TPlayerStick


While Not AppTerminate() Or KeyDown(KEY_ESCAPE)
Cls
bpad.TPlayerMove



Flip(-1)
Wend


Type TPlayerStick

Field X:Int = 400
Field Y:Int = 300

Method TPlayerMove()

If KeyDown(KEY_LSHIFT)
Y = Y + 1
ElseIf KeyDown(KEY_RCONTROL)
Y = Y - 1
EndIf

EndMethod

EndType


Many thanks for your help in advance! :D


Jesse(Posted 2012) [#2]
this is where your problem is:

' you need to declare a variable for the image that is different than the variable for the object Tplayer
Global bpad:TImage = LoadImage("incbin::blue_paddle.jpg")
'when using strict you have to declare the variable as local or global
bpad.TPlayerStick = New TPlayerStick


it should be something like this:

Global dpadImage:TImage = LoadImage("incbin::blue_paddle.jpg")

Local bpad:TPlayerStick = New TPlayerStick



Captain Wicker (crazy hillbilly)(Posted 2012) [#3]
I still dont quite understand. it says this:
Compile Error: Expression must be a variable

and highlights this line:
Local bpad.TPlayerStick = New TPlayerStick

Here is the code I used to compile in BLide
Strict

AppTitle:String = " "

Graphics 800, 600
AutoMidHandle True
SeedRnd(MilliSecs())


Incbin "blue_paddle.jpg"

Global bpadImage:TImage = LoadImage("incbin::blue_paddle.jpg")

Local bpad:TPlayerStick = New TPlayerStick


While Not AppTerminate() And Not KeyDown(KEY_ESCAPE)
Cls
bpad.TPlayerMove



Flip(-1)
Wend


Type TPlayerStick

Field X:Int = 400
Field Y:Int = 300

Method TPlayerMove()

If KeyDown(KEY_LSHIFT)
Y = Y + 1
ElseIf KeyDown(KEY_RCONTROL)
Y = Y - 1
EndIf

EndMethod

EndType

Am I doing something else incorrectly? What does it mean to add an Expression as a Variable?

EDIT: hmm... I just know i have forgotten to add something here but am not sure what it was.... :/

Last edited 2012

Last edited 2012


Jesse(Posted 2012) [#4]
Local bpad.TPlayerStick = New TPlayerStick

thats not what I posted. LOL, you are getting the Blitz3d syntax mangled with Blitzmax . "." should be ":".


Captain Wicker (crazy hillbilly)(Posted 2012) [#5]
you are getting the Blitz3d syntax mangled with Blitzmax

I guess I should just keep going with BlitzMax and leave B3D alone for now, Using 2 languages at once can really throw you off! :D


SystemError51(Posted 2012) [#6]
Global bpad:TImage = LoadImage("incbin::blue_paddle.jpg")

bpad.TPlayerStick = New TPlayerStick



...will never work, since there is no TPlayerStick field defined in a TImage, obviously.

You need to declare things separately, like so:

Global bpadImage:TImage = LoadImage("incbin::blue_paddle.jpg")

Global bpad:TPlayerStick = New TPlayerStick


Last edited 2012


Captain Wicker (crazy hillbilly)(Posted 2012) [#7]
I get "." and ":" confused all the time and what is the difference between
Global bpadImage:TImage = LoadImage("incbin::blue_paddle.jpg")

and
Global bpad:TImage = LoadImage("incbin::blue_paddle.jpg")

Why does this matter?


Jesse(Posted 2012) [#8]
you declared "bpad" as variable of type "Image" and as a variable of type "TPlayerStick"
you have to decide for one or the other. variables can not be used for two different uses.

Last edited 2012


SystemError51(Posted 2012) [#9]
"." is the separator used to "talk" to an object. ":" is the separator the declares what kind of object a variable is assigned to.

I get "." and ":" confused all the time and what is the difference between

Global bpadImage:TImage = LoadImage("incbin::blue_paddle.jpg")


and

Global bpad:TImage = LoadImage("incbin::blue_paddle.jpg")



There is no difference between those, they are both valid. However a variable can only be used for one object - you could not use bpad (or bpadImage) for anything other than TImage object operations.

It's different when you use Local variables within methods or loops. A variable of the same name can then be very well used for all kinds of objects, provided those Local variables are in separate methods.

Last edited 2012