Обратил внимание что использование For Each с проверкой всех полей, при большом количестве записей начинает напрягать проц. Написал выход.
1. Обычный перебор (при 15к записей 1 кадр высчитавает 30-31 мс)
For grass.grass=Each grass
grass\timer=grass\timer+time
If grass\growed=False Then
grass\scale=grassMaxScale*(grass\timer/Float(grassIntervalGrow))
ScaleSprite grass\entity,grass\scale,grass\scale
PositionEntity grass\entity,EntityX(grass\entity),grass\y+grass\scale,EntityZ(grass\entity)
If grass\scale>grassMaxScale Then grass\growed=True
EndIf
Next
2. Мой вариант перебора (при 15к записей 1 кадр высчитавает 16-17 мс)
Function GrassUpdate()
For grass.grass=Each grass
grass\timer=grass\timer+time
Next
End Function
Function GrassCheck(n)
For i=1 To n
If Not grassHandle Then
grassHead.grass=First grass
grassHandle=Handle(grassHead)
Else
grass.grass=Object.grass(grassHandle)
If grass\growed=False Then
grass\scale=grassMaxScale*(grass\timer/Float(grassIntervalGrow))
ScaleSprite grass\entity,grass\scale,grass\scale
PositionEntity grass\entity,EntityX(grass\entity),grass\y+grass\scale,EntityZ(grass\entity)
If grass\scale>grassMaxScale Then grass\growed=True
EndIf
grass.grass=After grass
grassHandle=Handle(grass)
EndIf
Next
End Function
В кратце смысл такой, если у вас будет несколько тысяч записей, то можно одной функцией применять изменения к "моментальным полям" всех записей (т.е. те поля, которые необходимо изменять каждый кадр), а остальные поля (которые не требуется проверять моментально) проверять в n-ом количестве, например не сразу 2000 записей за кадр, а по 100 записей.
Посмотрите пожалуста, у меня в другом коде этот метод не работает, хотя должно было работать после копи-паст.
Поделитесь какие тут недостатки
Прикреплены примеры