我正在开发一款需要顶级音效的游戏。我为效果创建了一个对象池,以便能够重用它们。我的问题是我应该如何编写一个不错的池解决方案,而不必为每种声音类型创建一个池。pool 的 checkout 函数返回列表中的第一个声音。
这个肮脏的小解决方案检查我们从池中借来的项目是否具有我想要创建的相同声音。如果它是相同的声音,我不会再次创建声音。如果不是,即使我知道池中有正确声音的实例,我也会创建它。
var item : ISoundItem = _soundPool.checkOut();
if(item.name != name)
item.create(name, _soundFactory.create(name), config);
这个肮脏的解决方案已将我的实例从数百个实例减少到大约七个实例,但我认为我可以对其进行更多优化。
我一直在考虑将声音名称传递给结帐功能,但是每次都必须遍历池真的值得吗?
有任何想法吗?