当用户转到浏览器中的新选项卡时,如何阻止 Flash (AS3) 程序的帧速率下降?



每次我在浏览器中运行Flash程序时,每当我转到不同的选项卡时,帧速率都会从30下降到2。有没有办法在窗口不聚焦时阻止背景帧速率下降?如果我在浏览器中打开一个新窗口,即使该窗口用Flash程序覆盖了该窗口,帧速率也不会下降。如果有帮助的话,我也在FlashDevelop工作。谢谢

发现了一些2014年的源代码,并发现了我最终使用的内容:

HUD。如:

    public var idle:Boolean = false;
    public var catchingUp:Boolean = false;
    private var secondsIdle:int = 0;
    stage.addEventListener(Event.DEACTIVATE, StartIdleMode);
    stage.addEventListener(Event.ACTIVATE, RegainedFocus);
    public function Update(sta:DisplayObjectContainer, save:SharedObject):void
    {
        //...The game logic that happens every frame...
        if (secondsIdle < 0)
        {
            idle = true;
        }
    }
    private function StartIdleMode(e:Event):void
    {
        var date:Date = new Date();
        secondsIdle = date.valueOf();
    }
    private function RegainedFocus(e:Event):void
    {
        if (idle)
        {
            var diffDate:Date = new Date();
            secondsIdle += -(diffDate.valueOf() / 2);
            catchingUp = true;
        }
    }
    public function CatchUp(sta:DisplayObjectContainer, save:SharedObject):void
    {   
        var tempFrames:int = Math.floor(secondsIdle / 1000 * 30);
        while (tempFrames < 0)
        {
            this.Update(sta, save);
            tempFrames++;
        }
        idle = false;
        catchingUp = false;
        secondsIdle = 0;
    }

Main.如:

    private var gameTimer:Timer = new Timer(1000 / 30, 0);
    private var hud:HUD;
    public function Main():void
    {
        gameTimer.addEventListener(TimerEvent.TIMER, GameLoop);
        gameTimer.start();
    }
    private function GameLoop(e:TimerEvent):void
    {
        if (!hud.idle)
        {
            hud.Update(stage, gameSystem.saveData);
        }
        if (hud.catchingUp)
        {
            hud.CatchUp(stage, gameSystem.saveData);
        }
    }

最新更新