在尝试优化我的游戏后,我从明显的对象池开始。我使用 max_growth 等跟随更复杂的一个,然后继续一个简单的,但我一直遇到同样的问题。现在经过 40 多个小时的在线搜索并向一位比我了解更多关于 flash 的朋友寻求帮助后,我已经放弃并决定来这里。下面的代码包括一些 # 仅供参考,我已经在我的评论中留下了我尝试过但也没有奏效的东西。
我的 Cpool 课
package {
import flash.display.DisplayObject;
public class CPool
{
public var counter:int;
private var pool:Array;
//public function CPool(type:class, len:int)
public function CPool()
{
pool = new Array();
counter = 10;
//counter=len;
//var i:int=len;
var i:int = 10;
while (--i > -1)
//pool[i] = new type();
pool[i] = new Condor();
};
public function getCondor():Condor
{
trace(counter);
//trace (pool.length);
if (counter > 0)
{
return pool[--counter];
}
else
{
var cde = new Condor();
return cde;
}
};
public function disposeCondor(disposedCondor:Condor):void {
pool[counter++] = disposedCondor;
//pool.unshift(disposedCondor); #10
};
}
}
你可以看到这是一个简单的,只使用 get 和 dispose。我在下面的逻辑类中的代码指的是池。
public var cpool:CPool;
cpool = new CPool(); //(in the constructor)
else if (whichBird ==12)
{
bird = cpool.getCondor() as Condor;
} // (in the addBird section)
private function checkBirdsOnScreen():void
{
for (var i:int = 0; i < birdArray.length; i++)
{
var dg = birdArray[i];
if (birdArray[i].x < -100 )
{
dg.parent.removeChild(dg);
birdArray.splice(i, 1);
//hc.destroyCondor(); #9
//tr cpool.disposeCondor(dg); #1
//birdArray[i].destroyCondor(); #2
}
}
}
最后是我在秃鹰类中的破坏鸟功能
public function destroyCondor():void
{
//removeChild(oldCondor); #5
//ConPool.disposeCondor(oldCondor); #4
//this.x=390 #3
//ConPool.disposeCondor(this);
parent.removeChild(this); //remove object from stage
removeEventListener(Event.ENTER_FRAME, CondorLoop);
}
正如你所看到的,我已经尝试了所有我能想到的方法来让它发挥作用。代码从池中的 10 只秃鹰开始,当它们离开屏幕时,它们会离开,池中的跟踪计数器显示池正在下降,当它变为 0 时,它会创建新的秃鹰。现在这种方式可以使用,或者当我使用 destroyCondor 时,除非我删除一些评论。当我在 dispose condor 中删除 //tr 然后它适用于前 2 个 condor,计数器变为 9,然后是 9,然后是 10 并保持在 10,问题是它不再在屏幕上显示,没有错误但它停止工作。顺便说一句,我也尝试过跟踪(pool.length),但我一直在下降 10 秒。
我也试过 #1 和 2 没有效果。我最接近的是#10,池中的 unshift 语句。这实际上看起来很有效,计数器下降到 9,当它们离开屏幕时又回到 10,就像将它们放回池中一样,但是当 10 过去时,它们就完全停止了,甚至绕过了新的 condor 语句。正如您从评论中看到的那样,我真的已经尝试了所有我能想到的东西,甚至从更高级的池化到这个简化版本,但仍然一无所获。现在超过 40 小时,熬夜到凌晨 4 点,因为我对无法解决这个问题感到非常沮丧,我什至还没有完成位图缓存。有人可以帮忙吗?