Lists and powers of 2
BlitzMax Forums/BlitzMax Beginners Area/Lists and powers of 2
| ||
The code below basically is from a german tutorial (I think) with the added "tweak" by me that I remove the "tanks" that go offscreen from the list, originally in order to speed up things. This all works fine, but what can be easily observed is that the speed does not increase gradually, but in distinctive jumps (which only become obvious when the number of tanks is higher than 32). But why is this ? I see distinctive Jumps when the object number displayed falls below 1024, 512, 256, 128 (after that, it becomes too fast for me to detect altered speeds) Global Number_of_Tanks = 2048 Type Tank Field X# Field Y# Field Dir% Field Armor% = 100 Field Speed# = 2.8 Field Size% = 25 Global TankNumber = 0 End Type Global x = 1024 Global y = 768 SeedRnd MilliSecs() Graphics x, y,32,60,1 Global TankList:TList = CreateList( ) For Nr = 1 To Number_of_Tanks Local NewTank:Tank NewTank = New Tank NewTank.Armor = Rand( 1, 5 ) * 10 NewTank.X = Rand( 5, x ) ; NewTank.Y = Rand( 5, y ) NewTank.Dir = Rand( 0, 360 ) ListAddLast TankList, NewTank Tank.TankNumber:+ 1 Next While Not KeyDown( Key_Escape ) For T:Tank = EachIn TankList c = CountList(tanklist) If c = 0 Exit EndIf DrawRect( T.X, T.Y, T.Size, T.Size ) DrawText "Number of Tanks : " + c, 20, 20 T.X:+ T.Speed * Cos( T.Dir ) *2 T.Y:+ T.Speed * Sin( T.Dir ) If ( T.X > X ) 'And ( ( t.y > y ) Or ( t.y < 0 ) ) RemoveLink( ListFindLink( Tanklist, t ) ) ElseIf T.x < 0' And ( t.y > y Or t.y < 0 ) RemoveLink( ListFindLink( Tanklist, t ) ) ElseIf ( T.Y > Y ) 'And ( ( t.y > y ) Or ( t.y < 0 ) ) RemoveLink( ListFindLink( Tanklist, t ) ) ElseIf T.Y < 0' And ( t.y >y Or t.y <0 ) RemoveLink( ListFindLink( Tanklist, t ) ) EndIf Next Flip ; Cls If c = 0 Exit EndIf Wend |
| ||
DrawText is bottleneck... remove DrawText "Number of Tanks : " + c, 20, 20 and add that after Next: DrawText "Number of Tanks : " + tanklist.count() , 20 , 20 Use bitmapfonts. Never use DrawText in loops... |
| ||
Ah.... thanx, Zeke. >Never use DrawText in loops... Should have thought of that myself - from a general performance viewpoint. Yet it is still a mystery to me why the speed increase wasn't smooth because of that condition I provoked. Nevertheless, thx again. Y. |