Any sugestions for this setup? (MaxGui)
BlitzMax Forums/BlitzMax Beginners Area/Any sugestions for this setup? (MaxGui)
| ||
| I want to make some kind of "life-emulation", where generations of "Pixel-beings" can procreate the next. So I want the program to be able to run in the "background", while the user can do something else. I have cut and pasted something of a start, but is this a good way to do something like this? Any suggestions of improvements or alternatives will be greatly apreciated. :) The code so far:
SuperStrict
Global TankWidth:Int=255,TankHeight:Int=255
Global CanvasWidth:Int=400, CanvasHeight:Int=300
Global ButtonHeight:Int=32, BorderSize:Int=16
Global EWindow:TGadget=CreateWindow("Evolution", 100,100,CanvasWidth+2*BorderSize,CanvasHeight+ButtonHeight+2*BorderSize)
Global ECanvas:TGadget=CreateCanvas(BorderSize,BorderSize,CanvasWidth,CanvasHeight,EWindow)
Global x:Int=0
Global y:Int=0
Global t:Int,u:Int
ActivateGadget ECanvas
Repeat
WaitEvent()
Select EventID()
Case EVENT_WINDOWCLOSE
End
Case EVENT_MOUSEENTER
HideMouse
Case EVENT_MOUSELEAVE
ShowMouse
Case EVENT_MOUSEMOVE
x=EventX()
y=EventY()
Case EVENT_GADGETPAINT
End Select
SetGraphics CanvasGraphics (ECanvas)
Cls
For t=0 To Tankwidth-1
For u=0 To TankHeight-1
SetColor (Rnd(0,255),Rnd(0,255),Rnd(0,255))
Plot t,u
Next
Next
DrawRect x,y,40,40
Flip
RedrawGadget(ECanvas)
Forever
(Of course it also need some buttons and other kind of control.) |
| ||
| Get rid of the globals, and especially globals like x, y, t etc. Those are typically used for local loops and such. Make a TLifeemulation type, hide them there, don't put all these things as globals in your app or it'll seriously limit your app after a few hours/days. (depending on your code-speed) Furthermore, not really a bug orso, but be aware that your Redrawgadget(ECanvas) could 've been without the ( ). blah=Bla(a,b,c) Bla a,b,c see the difference? The first one requires ( ) because Bla is a function returning a value. The second one doesn't return anything, so doesn't need ( ). Your code will function with them however.. it's more a matter of style.. |
| ||
| @CS_TBL: Thanks; One picks up some habits in ones Programminglife :) I use those globals that "lazy" way when I'm testing stuff and don't want to declare them every time I write a temporary function. pfft :) In the mean time the little program as seen above has progressed some and instead of being random, the pixelbeings are moving around on their own. (there is a lot of them) Now I encounter some strange "hickups". The movement stops and then start again, and I cant figure out why. I have tried to place the drawing stuff under the case EVENT_GADGETPAINT, but thas didn't help. Can it be the way I use RedrawGadget ECanvas? Is it WindowsXP? Is it my PC? Or is it Me? |
| ||
| Can't say without seeing it. |
| ||
| How are you handling your Canvas redraw? You might prefer to use a Timer, rather than call redraw after the flip, otherwise the frame update will more likely be subject to skipping etc. Have a look at the CreateCanvas example in the docs. It uses a timer which generates an EVENT_TIMERTICK event per "tick" : CreateTimer 60 you could then have this in your select...
Case EVENT_TIMERTICK
RedrawGadget ECanvas
Might make it run a bit smoother? |