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? |