Итак, что же такое оптимизация? А это просто изменение исходного кода программы / добавление новых модулей с целью повышения её быстродействия. Рассмотрим конкретный пример:
...
If MouseHit(1) PickUnit()
...
Function PickUnit()
Pick=CameraPick(camera,MouseX(),MouseY())
For u.unit = each unit
If Pick=u\model SelectUnit(u)
Next
End Function
С функцианальной точки зрения код совершенно правильный, и всегда будет получаться ожидаемый результат, но посмотрим что можно же здесь улучшить:
1) "Отброс невозможных вариантов"
Нетрудно заметить, что при нажатии кнопки мыши мы можем выделить только
одного юнита, значим мы можем изменить код функции так:
Function PickUnit()
Pick=CameraPick(camera,MouseX(),MouseY())
For u.unit = each unit
If Pick=u\model
SelectUnit(u)
Return
EndIf
Next
End Function
Итак, мы в среднем увеличили скорость выполнения цикла
в два раза!
2)"Задание условий выполнения"
Так же можно заметить, что при нажатии кнорки мыши мы не всегда попадаем в юнита, а значит поставить проверку попали ли мы вообще в юнита? Изменим код так:
Function PickUnit()
Pick=CameraPick(camera,MouseX(),MouseY())
If Pick=0 Return
For u.unit = each unit
If Pick=u\model SelectUnit(u)
Return
Next
End Function
Здесь важно заметить, что подразумевается, что кроме юнитов никакие другие объекты не выделяются. Если это не так, то можно попробовать сделать следующее:
Function CreateUnit()
u.unit= New unit
...
NameEntity(u\model,"Unit")
...
End Function
Function PickUnit()
Pick=CameraPick(camera,MouseX(),MouseY())
If Pick=0 Return
If EntityName$(u\model)<> "Unit" Return
For u.unit = each unit
If Pick=u\model
SelectUnit(u)
Return
EndIf
Next
End Function
P.S. Если вы имеете дело не с функцией, или кроме цикла (не обязательно цикла) имеется что-то ещё, то для первого случая нужно использовать
Exit, а для второго
If...End If.