У меня есть сценарий в игре с функцией, которая вызывается каждую секунду.Расстояния между объектами игрока и другими игровыми объектами рассчитываются каждую секунду.Проблема в том, что за одну секунду может быть до 800 вызовов функций (до 40 игроков * 2 основных объекта (от 1 до 10 подобъектов)).Я должен оптимизировать эту функцию для меньшего количества обработки.это моя текущая функция:
local square = math.sqrt;
local getDistance = function(a, b)
local x, y, z = a.x-b.x, a.y-b.y, a.z-b.z;
return square(x*x+y*y+z*z);
end;
-- for example followed by: for i = 800, 1 do getDistance(posA, posB); end
Я обнаружил, что локализация функции math.sqrt через
local square = math.sqrt;
- это большая оптимизация в отношении скорости и кода
x*x+y*y+z*z
быстрее, чем этот код:
x^2+y^2+z^2
Я не знаю, лучше ли локализация x, y и z, чем использование метода класса "."в два раза, так что, возможно, square(a.x*b.x+a.y*b.y+a.z*b.z)
лучше, чем код local x, y, z = a.x-b.x, a.y-b.y, a.z-b.z;
square(x*x+y*y+z*z);
Есть ли в математике лучший способ рассчитать длину вектора или в Lua есть больше советов по производительности?