【问题标题】:Javascript, object with set lifetime?Javascript,具有设定生命周期的对象?
【发布时间】:2012-02-20 14:05:08
【问题描述】:

我遇到了一个问题,我真的不知道如何用 JavaScript 编写代码。问题是我希望能够创建许多添加到数组中的对象。当创建对象以添加到此数组时,它们将具有“生命周期”。当这个生命周期结束时,这个对象应该从数组中删除。

我在这里尝试构建的是一个粒子系统,在该粒子系统中,在所讨论的粒子生命周期结束后,粒子将从被渲染中消失。

谁有这方面的好主意或例子?

我曾考虑过使用setTimeout、setInterval 和clearInterval,但不确定这将如何最有效。

【问题讨论】:

  • 您能否提供一些界限,例如最大对象数或最小生命周期?一个想法可能是使用优先级队列,定期测试第一个 n 元素是否过期并删除它们。

标签: javascript arrays settimeout setinterval lifetime


【解决方案1】:

类似this?

Felix Kling 更新:

var a = [], next = function() {
    a = a.slice(0,-1);
    document.body.innerHTML += a.length + "<br />";
    if (a.length != 0)
        setTimeout(next, 100);
};
for (var i = 0; i < 100; i++) {
    a.push({hi: 1});
}
setTimeout(next, 100);​

【讨论】:

  • 根据元素的数量,为每个元素创建一个setTimeout 并不是一个好主意。它会对浏览器产生性能影响。
  • 性能是应该始终考虑的事情;)我在对这个问题的评论中提供了另一个想法。
  • 我试试看。感谢您的提示。
【解决方案2】:

您可以使用 micha 的代码示例。在每次调用“下一个”函数时,您都可以更新粒子的状态(位置、速度等)。您还可以跟踪粒子的创建时间,并在每次“下一次”调用时检查当前时间减去创建时间是否超过某个常数,如果超过则删除粒子。根据所需的动画质量,您可能希望减少超时之间的时间,例如setTimeout(next, 25); 祝你好运:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-10
    • 2019-02-08
    • 1970-01-01
    • 2011-04-28
    • 1970-01-01
    相关资源
    最近更新 更多