Hi,
I've written this (see below) and I'm sure it could be written better. In particular I think there are better ways of detroying extended classes (some way to do it from the Base class that cleas up all the counters?). Thanks to anyone who can help with this.
I've written this (see below) and I'm sure it could be written better. In particular I think there are better ways of detroying extended classes (some way to do it from the Base class that cleas up all the counters?). Thanks to anyone who can help with this.
'Set Up Graphics Window Const G_WIDTH = 800 Const G_HEIGHT = 600 Graphics G_WIDTH,G_HEIGHT,16,85 ' Define a type for a visual Type Visual ' Maintain List Global VCount Global VisualItemList:TList 'Global angRotate# Field x#,y# Field alpha# Field rotation Field gfxHandle Function Create:Visual(tx,ty) v:Visual = New Visual v.SetXY(tx,ty) End Function Method SetXY:Visual(tx,ty) x = tx y = ty End Method Function UpdateAll:Visual () If VisualItemList = Null Then Return For v:Visual= EachIn VisualItemList v.Update v.Draw Next End Function Method New () If VisualItemList = Null Then VisualItemList = New TList VisualItemList.AddLast Self VCount = VCount + 1 alpha# = 1 End Method Method Destroy () VisualItemList.Remove Self VCount = VCount - 1 End Method Method Update() DrawText "UPDATE BASE", MouseX(), MouseY() + 40 End Method Method Draw() SetBlend ALPHABLEND SetAlpha alpha# 'angRotate = angRotate + 0.1 'SetTransform angRotate,1,2 DrawOval x,y,10,10 End Method End Type Type Particle Extends Visual Global PCount Field dx#,dy# Function Create:Particle(tx,ty) p:Particle = New Particle p.SetXY(tx,ty) p.SetParticle() End Function Method SetParticle() dx# = (Rndfloat#() - 0.5) * 5 dy# = (Rndfloat#() - 0.5) * 5 PCount = PCount + 1 End method Method Update() x = x + dx# y = y + dy# UpdateLife() DrawText "UPDATE PARTICLE", MouseX(), MouseY() + 60 Super.Update() End Method Method UpdateLife() If alpha# <= 0 PCount = PCount - 1 Super.Destroy endif alpha# = alpha# - 0.005 End Method End Type Type BounceParticle Extends Particle Global BCount Function Create:Particle(tx,ty) b:BounceParticle = New BounceParticle b.SetXY(tx,ty) b.SetParticle() BCount = BCount + 1 End Function Method Update() If x + dx# > G_WIDTH Or x + dx# < 0 dx# = -dx# endif If y + dy# > G_HEIGHT Or y + dy# < 0 dy# = -dy# EndIf alpha# = alpha# - 0.005 If alpha# <= 0 BCount = BCount - 1 EndIf DrawText "UPDATE BOUNCE", MouseX(), MouseY() + 80 Super.Update() End Method End Type While KeyDown(KEY_ESCAPE) = False Cls SetColor 255, 255, 255 DrawText "X", MouseX(), MouseY() If MouseDown(1) If Rand(0,1) = 0 BounceParticle.Create(MouseX(),MouseY()) else Particle.Create(MouseX(),MouseY()) endif EndIf Visual.UpdateAll() SetBlend SOLIDBLEND SetAlpha 1 DrawText "Visuals : " + Visual.VCount , 20, 20 DrawText "Particles : " + Particle.PCount , 20, 40 DrawText "Bouncers : " + BounceParticle.BCount , 20, 60 FlushMem Flip Wend End