我在游戏中有一个脚本,每秒都会调用一个函数.在那里每秒计算玩家对象和其他游戏对象之间的距离.问题是在1秒钟内可以有理论上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
Run Code Online (Sandbox Code Playgroud)
我发现,math.sqrt函数的本地化通过
local square = math.sqrt;
Run Code Online (Sandbox Code Playgroud)
关于速度和代码是一个很大的优化
x*x+y*y+z*z
Run Code Online (Sandbox Code Playgroud)
比这段代码快:
x^2+y^2+z^2
Run Code Online (Sandbox Code Playgroud)
我不知道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中有更多的性能提示?