Why Do I get this Error?

BlitzMax Forums/BlitzMax Beginners Area/Why Do I get this Error?

Eric(Posted 2005) [#1]
Graphics 1024,768
Global Rocks:TList = New TList

Type ScreenObject

Field X:Int
Field Y:Int
Field XV:Float
Field YV:Float
Field Rotation:Float
Field RotationSpeed:Float
Field Image:Timage
Method Update() Abstract
End Type

Type Ship Extends ScreenObject
Function Create:Ship(XX,YY)
P:Ship = New Ship
P.Image:Timage=LoadImage("PlayerShip.Bmp")
SetImageHandle (p.Image,36,42)
P.X=Rand(1000)
P.Y=Rand(700)
Return P
End Function
Method Update()
SetRotation Self.Rotation
DrawImage (Self.Image,Self.X,Self.Y)
End Method

End Type

Type Rock Extends ScreenObject

Function Create:Rock(XX,YY)
R:Rock=New Rock
R.X=Rand(1024)
R.Y=Rand(768)
R.Rotation=Rand(360)
R.RotationSpeed=Rnd(5.0)
R.Image:Timage=LoadImage("Asteriod.bmp")
SetImageHandle (R.Image,64,64)
ListAddLast Rocks,R
Return R
End Function

Method Update()
Local Asteroid:Rock
For Asteroid=EachIn Rocks
Asteroid.Rotation:+1
If Asteroid.Rotation>360 Then Asteroid.Rotation=0
SetRotation Asteroid.Rotation
DrawImage (Asteroid.Image,Asteroid.X,Asteroid.Y)
Next
End Method
End Type
Player:Ship=Ship.Create(0,0)
For tt=1 To 50
Rock.Create(10,10)
Next
Repeat

Cls
SetBlend(alphaBlend)

Player.Update()
Rock.Update()


Flip
Until KeyHit(Key_Escape)

Identifier 'Update' Not Found... It happens at Rock.Update()

What am I doing Wrong?

Thanks,
Eric


Sarge(Posted 2005) [#2]
You have to create a new object like - "R:Rock = New Rock"
Graphics 1024,768
Global Rocks:TList = New TList

Type ScreenObject

Field X:Int
Field Y:Int
Field XV:Float
Field YV:Float
Field Rotation:Float
Field RotationSpeed:Float
Field Image:Timage
Method Update() Abstract 
End Type

Type Ship Extends ScreenObject
Function Create:Ship(XX,YY)
P:Ship = New Ship
P.Image:Timage=LoadImage("PlayerShip.Bmp")
SetImageHandle (p.Image,36,42)
P.X=Rand(1000) 
P.Y=Rand(700) 
Return P
End Function
Method Update()
SetRotation Self.Rotation
DrawImage (Self.Image,Self.X,Self.Y)
End Method

End Type

Type Rock Extends ScreenObject

Function Create:Rock(XX,YY)
R:Rock=New Rock
R.X=Rand(1024)
R.Y=Rand(768)
R.Rotation=Rand(360)
R.RotationSpeed=Rnd(5.0)
R.Image:Timage=LoadImage("Asteriod.bmp")
SetImageHandle (R.Image,64,64)
ListAddLast Rocks,R
Return R
End Function

Method Update()
Local Asteroid:Rock
For Asteroid=EachIn Rocks 
Asteroid.Rotation:+1
If Asteroid.Rotation>360 Then Asteroid.Rotation=0
SetRotation Asteroid.Rotation
DrawImage (Asteroid.Image,Asteroid.X,Asteroid.Y)
Next
End Method
End Type 
Player:Ship=Ship.Create(0,0)
For tt=1 To 50 
R:Rock = New Rock
Rock.Create(10,10)
Next 
Repeat

Cls
SetBlend(alphaBlend)

Player.Update()
R.Update()


Flip
Until KeyHit(Key_Escape)


blitzbasic.com forurm tag "code /code" - include the brackets


Eric(Posted 2005) [#3]
I have that line in my Create:Rock Function... I noticed that if I don't have Abstract Update() and change the Update Method in the Rock Type to a Function my code Runs. This OOP is very new to me.


Sarge(Posted 2005) [#4]
But if you put that in a function it will only be called within the function not out of it its similar to Local but your looking for Global.


FlameDuck(Posted 2005) [#5]
change the Update Method in the Rock Type to a Function my code Runs.
That's because you are invoking update() on the Type in general, not a specific instance of said type (thus it's looking for a Function called Update, which you don't have).

Methods belong to objects/instances, and can only be invoked with a suitable object handle.

Functions belong to the entire type/class and is traditionally invoked like in your example.

The "Abstract" keyword means that you would like a particular function or method to be part of a type interface, but that implementation will be different depending on which extended object/class you're dealing with (polymorphism).


Eric(Posted 2005) [#6]
ok thanks...That helps alot... It's going to take me a little getting use to all of this new stuff...Just like "Types" in general when I first started with BlitzBasic (2d). Thanks for all of the input.