【发布时间】:2012-04-01 01:35:39
【问题描述】:
我正在创建一个 Asteroids 克隆,但还有一些花里胡哨。
截至目前,我有一个 ArrayList<Asteroid>,它将所有小行星都显示在屏幕上。每个都有一个与之关联的Vector,并扩展了我的通用GameObject 类,该类处理绘制和更新以及每个游戏对象共有的其他常见事物。
也就是说,每次我摧毁一颗小行星时,我都会创建一个新的 Asteroid 对象并将其添加到 ArrayList<Asteroid>... 发生这种情况时会出现明显的延迟,因为我还会创建爆炸粒子,我假设这是GC。
我的想法是,我可以预先创建一个池并重新使用它们,而不是动态创建新对象。
这是正确的想法吗?还有什么是最有条理和最有效的方法?
任何其他想法也会很棒。只是试图减少所有这些对象的创建,因为它肯定会导致明显的滞后。谢谢!
【问题讨论】:
-
您是否尝试过使用 DDMS 找出需要时间的地方?
-
我的猜测是延迟是由于您的代码在创建新的小行星对象之前等待爆炸完成。尝试使爆炸的小行星动画异步?
-
@dan:我没有这样做,但我认为它会有所帮助。我不怎么用 DDMS,如何用它来查看耗时最长的部分?
-
@deed02392:我认为这不是问题,因为在每次渲染调用时,我都会检查是否检测到命中,如果是,我会为爆炸创建 50 个粒子,然后我只是更新它们位置以及其他一切......
-
但是粒子的创建会阻塞后续帧渲染对吧?