New to OO and a bit slow at learning it
BlitzMax Forums/BlitzMax Beginners Area/New to OO and a bit slow at learning it
| ||
have a look at this please. Although it does what i want it to as in it draws a set number of squares and circles to the screen from a list of instances of a class/type im sure ive not got it quite right. help?Global width:Int = 640
Global height:Int = 480
Graphics width,height
Global cx,cy,csize:Int
Global shapecount:Int = 0
Global Spritelist:TList = New TList
AutoMidHandle(enable)
HideMouse
Type sprite
Field shape
Field cx
Field cy
Field csize
Field red,green,blue
Method draw(shape,cx,cy,csize,red,green,blue)
SetColor red,green,blue
If shape = 1
DrawOval(cx,cy,csize,csize)
EndIf
If shape = 2
DrawRect(cx,cy,csize,csize)
EndIf
EndMethod
Function Create:sprite(shape,cx,cy,csize,red,green,blue)
Local s:sprite = New sprite
s.shape = Rand(1,2)
s.cx = Rand(-100,640)
s.cy = Rand(-100,480)
s.csize = Rand(10,100)
s.red = Rand(10,255)
s.green = Rand(10,255)
s.blue = Rand(10,255)
Return s
EndFunction
EndType
While Not KeyDown(KEY_ESCAPE)
If shapecount < 1000
Spritelist.addlast(sprite.Create(shape,cx,cy,csize,red,green,blue))
shapecount = shapecount +1
EndIf
Local s:sprite
For s=EachIn Spritelist
s.draw(s.shape,s.cx,s.cy,s.csize,s.red,s.green,s.blue)
Next
Flip
Cls
Wend
End |
| ||
As your object (Type) has the fields your draw method requires you could do this:Method draw() SetColor red,green,blue If shape = 1 DrawOval(cx,cy,csize,csize) EndIf If shape = 2 DrawRect(cx,cy,csize,csize) EndIf EndMethod Or this (which is the way I prefer) Method draw() SetColor Self.red,Self.green,Self.blue If Self.shape = 1 DrawOval(Self.cx,Self.cy,Self.csize,Self.csize) EndIf If Self.shape = 2 DrawRect(Self.cx,Self.cy,Self.csize,Self.csize) EndIf EndMethod Also, I'd use a Select ... End Select block instead of your If ... EndIf part. By the way, why did you add this? Doesn't look to me like it's being used anywhere... Global cx,cy,csize:Int |
| ||
| thanks, the extra line Global cx,cy,csize:Int is where it used to procedural and i must have missed it when changing it round. the shapecount varible can be local missed that too. I dont learn well from books and ive been just trying basic things myself, its the only way i seam to be able to get my head round stuff like this. your tips are much appreciated. Pete |
| ||
| Hi Pete, Just to show the added value of OOP. The shape property of the sprite is acually a distinction between two different types of sprite. Therefor it's better (in OOP-terms) to make the sprite-type abstract and extend different types/shapes of sprites. In the provided code it's quite easy to define a new shapeSprite without rewriting the sprite-type. (try it :) I hope it helps. Regards, Kistjes |
| ||
| thanks Kistjes thats a good example. I think im almost ready to make a simple game demo. |