OOP problem with Bmax
BlitzMax Forums/BlitzMax Beginners Area/OOP problem with Bmax
| ||
| I can't get the following code to work. I created it to learn the basics of OOP. At the line e:enemy=e.create("bmax120.png") the execution stops without a message. Can anyone help me? P.S: I can see the potential of Bmax but Blitzplus was a hell lot easier to learn. Nathan.
Strict
Graphics 800,600,0
Global List:TList = New TList
Type enemy
Field x:Int
Field y:Int
Field dx:Int
Field dy:Int
Field gfx:Timage
Function Create:enemy(f:String)
e:enemy=New enemy
e.x=Rnd(0,799)
e.y=Rnd(0,599)
e.dx=1
e.dy=1
e.gfx=LoadImage(f)
List.addlast e
Return e
End Function
Method Draw()
DrawImage(gfx,x,y)
If x>800 Then dx=-1
If x<0 Then dx=1
If y>600 Then dx=-1
If y<0 Then dy=1
x=x+dx
y=y+dy
End Method
End Type
Global e:enemy
Global j:Int
'***** MAIN *****
DebugStop()
List:TList=CreateList()
For j=0 To 2
e:enemy=e.create("bmax120.png")
Next
While Not KeyDown(KEY_ESCAPE)
Cls
DebugStop()
For e:enemy=EachIn List
e.draw()
Next
Flip
FlushMem
Wend
EndGraphics
|
| ||
| It stops without a message as you have debugstop. Without this you get an Unhandled exception (beta doesn't have full debugger). You need to call... e:enemy = enemy.create("bmax120.png") <edit> In fact you only need... enemy.create("bmax120.png") |
| ||
| Sorry, I was not clear enough. Debugstop() was only to get me to the debugger. Anyway if I take out this line and change the second line to Graphics 800,600,32 I get the same result the execution stops without ever reaching the while wend loop. |
| ||
Nathan, here is a version that works. I changed a few things cause I'm picky :) Let me know if you have any questions. Strict
Global EnemyList:tList = CreateList()
Type tEnemy
Field X:Float
Field Y:Float
Field VX:Float
Field VY:Float
Field Gfx:tImage
Function Create:tEnemy(f:String)
Local e:tEnemy=New tEnemy
e.X=Rnd(0,799)
e.Y=Rnd(0,599)
e.VX=1
e.VY=1
e.Gfx=LoadImage(f)
EnemyList.AddLast(e)
Return e
End Function
Method Draw()
DrawImage(Gfx,X,Y)
If X>800 Then VX=-1
If X<0 Then VY=1
If Y>600 Then VY=-1
If Y<0 Then VY=1
X :+ VX
Y :+ VY
End Method
End Type
Graphics 800,600,0
AutoMidHandle (True)
For Local i:Int = 0 To 2 'Creates 3
tEnemy.Create("bmax120.png")
Next
While Not KeyDown(KEY_ESCAPE)
Cls
For Local e:tEnemy = EachIn EnemyList
e.Draw()
Next
Flip
FlushMem
Wend
EndGraphics |
| ||
| @Nathan, you missed this bit... You need to call... e:enemy = enemy.create("bmax120.png") <edit> In fact you only need... enemy.create("bmax120.png") |
| ||
| @tonyg Thanks for clearing this up. I've got it working now. @altitudems Thanks for the changes. I'm slowly getting used to the syntax. Nathan |