forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   BlitzMax (http://forum.boolean.name/forumdisplay.php?f=104)
-   -   оптимизация цикла (http://forum.boolean.name/showthread.php?t=6411)

snikers 28.09.2008 14:53

оптимизация цикла
 
Как избежать двух перебираний списка, если логика цикла устроена как:

Код:

Const FPS%=75
Global period#=1000.0/Float(FPS), elapsed%, ticks%, tween#, time%

time = MilliSecs()-period
Repeat
        Repeat
                elapsed=MilliSecs()-time
        Until elapsed
       
        ticks=elapsed/Int(period)
        tween=Float(elapsed Mod period)/period
       
        For Local i% = 1 To ticks
                time:+Int(period)
                ' LOGIC
                      перебор 1(для логики)
          Next

        'GRAPHICS
        Cls()
          перебор 2(для отрисовки)
        Flip()       
Forever
End

И еще, я правильно удаляю обекты из памяти и из списка?
Код:

If ((so.y > GraphicsHeight() + 300) Or (so.x > GraphicsWidth() + 300) Or (so.x < 0 - 300)) Then so.live = False
                If Not (so.live) Then SpaceObjectsList.Remove(so)
                so = Null


dimanche13 28.09.2008 15:57

Ответ: оптимизация цикла
 
от двух переборов не уйдешь вроде,
объект удаляется из памяти, елси на него нет больше нигде ссылок и только после команды GCcollect()

snikers 28.09.2008 17:56

Ответ: оптимизация цикла
 
Цитата:

Сообщение от dimanche13 (Сообщение 87033)
от двух переборов не уйдешь вроде,
объект удаляется из памяти, елси на него нет больше нигде ссылок и только после команды GCcollect()

всмысле? что такое ссылка? TLink? если я присвою обекту Null и вызову GCollect(), то он удалится?

dimanche13 29.09.2008 09:15

Ответ: оптимизация цикла
 
в принципе от двух переборов не уйти, но можно сделать так, чтоб update-перебор проходил по всем, а draw-перебор, только для тех, кто в фруструме камеры(окне вывода), тогда второй перебор будет меньше. Удаляя объект необходимо занулить и все его филды

Type _Object
field img:TImage
field snd:TSound

method Free()
img = null
snd = null
end method

end type

вызываешь free() а потом нулишь, сам объект.

snikers 29.09.2008 14:26

Ответ: оптимизация цикла
 
dimanche13, спсибо! теперь ситуация полностью прояснилась.


Часовой пояс GMT +4, время: 08:10.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot