我的绘图项目建议

我正在开发一个程序,每0.1秒更新一个对象列表。在程序完成更新列表后,程序将知道任何对象是否与其他对象在一定距离之内。每个对象在图形上都有一个X、Y位置。每个对象都有一个名为“Range”的值。每个重点(.1s),程序将使用距离公式来计算是否有其他对象小于或等于正在处理的对象的范围。

例如,如果点A的范围为4,处于(1,1)位置,点B位于(1,2),距离公式将返回~1,意味着点B在点A的范围之内。计算将类似于此:

objects = { A = {X = 1,Y = 1,Range = 4}, B = {X = 1,Y = 2,Range = 3}, C = {X = 4,Y = 7,Range = 9} }

while(true) do
 for i,v in pairs(objects) do
   v:CheckDistance()
 end
wait()
end

-- Point:CheckDistance() calculates the distance of all other points from Point "self".
-- Returns true if a point is within range of the Point "self", otherwise false.
--

问题: 图形可能包含200多个点,每个点都会应用于存在的每个其他点的计算。每个点每0.1秒都会发生这种情况。我想这可能会减慢或在我正在使用的3D环境中创建延迟。

问题: 这听起来像完成此操作的最佳方式吗? 您对如何更有效/快速地完成此操作有什么想法?

点赞
用户1721082
用户1721082

我不知道在你的情况下是否可能,但我一定会使用事件而不是循环。这意味着要跟踪点何时更改其位置并对其做出反应。这比循环更有效,因为它需要更少的处理并且可以比每秒更新位置更快地刷新位置。如果你的点漂浮,你可能应该设置一些函数调用时间上限,因为这样这些事件会被非常频繁地调用。

2012-10-08 18:45:04