因此,自10.1版以来,Flash播放器中出现了一个新的“功能”,当应用程序窗口不在视野范围内时,它会将播放器的帧速率降低到2 fps。这对性能来说是个好消息,但它可能会破坏某些功能,例如Timer类。
我有一个使用Timer来显示倒计时的应用程序。鉴于应用程序的性质,即使用户没有看到它,Timer也需要完成倒计时。想象一下,您只需要给用户10秒钟来执行任务。如果用户将窗口最小化通过计数器,他们可以花费他们想要的时间,并且当他们返回窗口时仍然有5秒钟。使用较新的闪存播放器显然无法避免这种情况。
在Air应用程序中有backgroundFrameRate属性可以设置为阻止此行为,但这是WindowedApplication类的一部分,因此它似乎在Web应用程序中不可用。有没有人知道一种方法来保持恒定的帧速率,即使窗口不可见?感谢
答案 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