help needed
BlitzPlus Forums/BlitzPlus Programming/help needed
| ||
Hi all, I'd be incredibly grateeful if someone could spare a couple of minutes to look over this code. It's the first time I've done any programming for many years, and the first time I have used 'types' - so it's likely i'm missing something really obvious. After running for a few seconds - all my particles disappear - why???? (Lower mound number if it runs slow) Hope you can help markyb [p4 2.8 / 512mb / 128mb geforce ti4600] -------------------------------------------------- ;bugged particles Graphics 800,600,32,2 SeedRnd (MilliSecs()) ;make a bug type Type bug Field size Field x# Field y# Field direction Field xspeed# Field yspeed# End Type ;make mound of bugs mound = 2000 For i = 1 To mound nest.bug = New bug nest\x# = 400 nest\y# = 300 nest\direction# = Rnd(360) - 180 nest\size = Rand(4) nest\xspeed# = Rnd(nest\size) + Rnd(4) nest\yspeed# = Rnd(nest\size) + Rnd(4) Next ; main loop While Not KeyHit(1) For nest.bug =Each bug SetBuffer BackBuffer() Cls draw_bug(nest.bug) Flip move_bug(nest.bug) Next Wend ; move the bugs Function move_bug(nest.bug) For nest.bug = Each bug ;check for edge collisions If nest\x#-nest\size<=100 Or nest\x#+nest\size>=700 Then nest\xspeed# = -nest\xspeed# If nest\y#-nest\size<=100 Or nest\y#+nest\size>=500 Then nest\yspeed# = -nest\yspeed# ;update bugs position nest\x# = nest\x# + Sin(nest\direction#)*nest\xspeed# nest\y# = nest\y# + Cos(nest\direction#)*nest\yspeed# Next End Function ; draw the bugs Function draw_bug(nest.bug) For nest.bug = Each bug Color 255-(nest\size*10),255-(nest\size*20),255-(nest\size*15) Oval nest\x#, nest\y#,nest\size,nest\size Next End Function ;-------------------------------------------- |
| ||
Works ok here - might be a pseudo-doublebuffering problem (double-buffering is faked when running in a window). Try running it full-screen and see if it still messes up. I tidied the main loop up a bit - give this a go: Graphics 800,600,32,2 SetBuffer BackBuffer() SeedRnd (MilliSecs()) ;make a bug type Type bug Field size Field x# Field y# Field direction Field xspeed# Field yspeed# End Type ;make mound of bugs mound = 2000 For i = 1 To mound nest.bug = New bug nest\x# = 400 nest\y# = 300 nest\direction# = Rnd(360) - 180 nest\size = Rand(4) nest\xspeed# = Rnd(nest\size) + Rnd(4) nest\yspeed# = Rnd(nest\size) + Rnd(4) Next ; main loop While Not KeyHit(1) Cls move_bug() draw_bug() Flip Wend ; move the bugs Function move_bug() For nest.bug = Each bug ;check for edge collisions If nest\x#-nest\size<=100 Or nest\x#+nest\size>=700 Then nest\xspeed# = -nest\xspeed# If nest\y#-nest\size<=100 Or nest\y#+nest\size>=500 Then nest\yspeed# = -nest\yspeed# ;update bugs position nest\x# = nest\x# + Sin(nest\direction#)*nest\xspeed# nest\y# = nest\y# + Cos(nest\direction#)*nest\yspeed# Next End Function ; draw the bugs Function draw_bug() For nest.bug = Each bug Color 255-(nest\size*10),255-(nest\size*20),255-(nest\size*15) Oval nest\x#, nest\y#,nest\size,nest\size Next End FunctionAlso note that you can access type collections from inside functions - you don't need to pass any parameters to draw_bug()/move_bug(). |
| ||
Yep - looks like it was the setbuffer inside the main loop - your version works fine - even in a window. Thanks very much for your speedy response - and the types tip. Cheers, markyb |