我的应用在移动设备上非常慢。
它使用了很多Event.ENTER_FRAME
事件监听器,所以我切换到了一个全局计时器(当我读到它们的性能要高得多),如果它们需要更新,这些类会监听这个全局计时器(如果它们已由 a 启动,它们只会使用这些计时器TouchEvent
) .
我还尝试启用硬件加速,并切换到使用 CPU,但这些对延迟问题没有明显帮助。(我的应用程序动画很少,所以我认为这是最好的决定)
我确实有很多电影剪辑,但其中很少有真正的动画,所以我怀疑这是一个问题。(这也是我不冻结和解冻对象的原因,因为它们永远不会从舞台上移除)
在这个网站上,他们对定时器说了以下
– 系统中滞留的计时器实例越多,您就越能期待缓慢而不稳定的游戏玩法或无响应的 UI。
我只使用一个计时器,所以我认为这不是问题,但是我确实有很多事件侦听器使用这个计时器来更新,所以我只能认为计时器一定是问题所在。因此,为了避免滞后,我正在寻找更好的选择。
需要明确的是,我不再使用很多 Event.ENTER_FRAME 事件侦听器,我主要切换到计时器。话虽如此,这里有一个对资源要求更高的例子。
package
{
import flash.display.MovieClip;
import flash.events.Event;
public class mc_BattleScene extends MovieClip
{
public static var mc_PlayerFace:MovieClip;
public static var enemyAttackEffect:MovieClip;
public static var mc_playerHitBox:MovieClip;
public static var battler1:Number = 1;
public static var battler2:Number = 1;
public static var battler3:Number = 1;
public var lvlModifier:Number;
public var dmgReduction:Number;
public var dmgDealt:Number;
public static var dmgSpeed:Number = 1;
public function mc_BattleScene()
{
visible = false;
addEventListener(Event.ENTER_FRAME, onFrame);
mc_PlayerFace = playerFace_mc;
enemyAttackEffect = attackEffect_mc;
mc_playerHitBox = playerHitBox_mc;
function onFrame(e:Event):void
{
battler1_mc.gotoAndStop(battler1);
battler2_mc.gotoAndStop(battler2);
battler3_mc.gotoAndStop(battler3);
if (Game.playerInteractionStatus[1])
{
//we are fighting
visible = true;
if (attackEffect_mc.hitTestObject(playerHitBox_mc))
{
// attack hit us, deal dmg
dmgReduction = (Game.playerStats[2] * (Game.enemyStats[1]));
dmgDealt = Game.enemyStats[1] - dmgReduction;
attackEffect_mc.x = 516;
if (Game.playerStats[0] - Math.round(dmgDealt) <= 0)
{
// round dmg to 0 (were dead)
Game.playerStats[0] = 0;
}
else
{
// deal damage to us
Game.playerStats[0] -= Math.round(dmgDealt);
}
}
else if(attackEffect_mc.hitTestObject(wall))
{
//stop the player from moving (by doing nothing)
}
else
{
attackEffect_mc.x -= dmgSpeed;
}
}
else
{
// reset the position of the attack effect if we are not fighting
visible = false;
attackEffect_mc.x = 516;
}
}
}
}
}
这个例子Event.ENTER_FRAME
是少数几个实际上如此复杂的例子之一,其他Event.ENTER_FRAME
的往往只是更新值(例如:更新文本字段以显示正确的数字变量)
例如:在 enterframe 中创建多个 var 可能会阻塞内存并导致延迟。
我已经避免做这样的事情,不仅是你所说的,而且在我看来,我认为在函数中连续定义它是没有意义的,我只更新这些值。
资源
http://help.adobe.com/en_US/as3/mobile/WS4bebcd66a74275c36cfb8137124318eebc6-8000.html
允许的最大链接数