5

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

我有一个使用计时器来显示倒计时的应用程序。鉴于应用程序的性质,即使用户不在那里,定时器也需要完成倒计时。想象一下,您只需要给用户 10 秒的时间来执行一项任务。如果用户在计数器中途最小化窗口,他们可以花费任意多的时间,并且当他们返回到窗口时仍然有 5 秒的时间。对于较新的 Flash 播放器,这显然是无法避免的。

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

4

3 回答 3

1

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

布赖恩

于 2011-11-28T10:32:04.343 回答
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 没有改变。Brian Bishop 先生的 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

于 2012-01-22T20:06:55.710 回答
0

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

stage.addEventListener(Event.DEACTIVATE, onDeactivate); 

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

让我知道这个是否奏效。

于 2011-11-29T09:47:07.577 回答