Flex Web应用程序:在窗口不可见时防止帧率下降

时间:2011-11-20 23:47:06

标签: flex web flashplayer-10

因此,自10.1版以来,Flash播放器中出现了一个新的“功能”,当应用程序窗口不在视野范围内时,它会将播放器的帧速率降低到2 fps。这对性能来说是个好消息,但它可能会破坏某些功能,例如Timer类。

我有一个使用Timer来显示倒计时的应用程序。鉴于应用程序的性质,即使用户没有看到它,Timer也需要完成倒计时。想象一下,您只需要给用户10秒钟来执行任务。如果用户将窗口最小化通过计数器,他们可以花费他们想要的时间,并且当他们返回窗口时仍然有5秒钟。使用较新的闪存播放器显然无法避免这种情况。

在Air应用程序中有backgroundFrameRate属性可以设置为阻止此行为,但这是WindowedApplication类的一部分,因此它似乎在Web应用程序中不可用。有没有人知道一种方法来保持恒定的帧速率,即使窗口不可见?感谢

3 个答案:

答案 0 :(得分:1)

将嵌入式swf的wmode参数设置为opaque将阻止帧速率限制。

布赖恩

答案 1 :(得分:0)

我没有试过自己,但也许你可以尝试强制帧率onDeactivate:

stage.addEventListener(Event.DEACTIVATE, onDeactivate); 

function onDeactivate (e:Event):void 
{ 
    //eg myFrameRate=24
    stage.frameRate = myFrameRate; 
} 

让我知道这是否有效。

答案 2 :(得分:0)

测试:

private var numer:int = 0;
private var prevNumer:int = 0;
private var timer:Timer = new Timer( 1000, 0 )

[...]

var tf:TextField = new TextField ();
addChild (tf);
addEventListener ( Event.ENTER_FRAME, onEnterFrame )
timer.addEventListener (TimerEvent.TIMER, onTimer )
timer.start()
function onTimer ( e:TimerEvent ):void
{ tf.appendText (' ' + (numer - prevNumer)); prevNumer = numer;}
function onEnterFrame ( e:Event ):void { numer++ }

清楚地表明,当你看到闪光灯时,tf附加的数字等于你的FPS。如果计时器与FPS一起改变,那么在最小化窗口时你不会看到差异。但是,回来你看2 2 2 2 2,也就是说,FPS下降到2。

AsTheWormTurns的

onDeactivate解决方案不起作用。事件被触发,但fps没有改变。 布莱恩·毕晓普先生的wmode = opaque解决方案也不起作用

尝试一些明显的事情:更改onEnterFrame函数以设置FPS:

function onEnterFrame ( e:Event ):void { numer++; stage.frameRate = 30 }

显然,当闪光灯不可见时,您无法设置FPS!好吧,除非将其设置为1,否则无法设置FPS。

解决方法您的问题很简单,只需创建一个与上面类似的计时器,但附加条件:

function onTimer ( e:TimerEvent ):void {
if ( numer - prevNumer == 2 ) adjustOriginalTimer();
tf.appendText (' ' + (numer - prevNumer)); prevNumer = numer;
}

E:你可以在这里阅读:http://help.adobe.com/en_US/as3/mobile/WS4bebcd66a74275c36cfb8137124318eebc6-8000.html

相关问题