Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
试图限制我的Flash游戏的帧速率_Flash_Actionscript_Adobe_Frame Rate - Fatal编程技术网

试图限制我的Flash游戏的帧速率

试图限制我的Flash游戏的帧速率,flash,actionscript,adobe,frame-rate,Flash,Actionscript,Adobe,Frame Rate,我有一个2008年的Flash游戏。这几天它跑得超快。事实上太快了。我在FlashDevelop中将其设置为60fps,但我认为这只是限制了draw调用的数量。我认为这些天我的逻辑每秒执行60次以上。我已经有一段时间没有编写ActionScript了,但我注意到我正在使用一个enterFrameHandler来执行我的逻辑循环。它似乎没有任何约束。它就像我所说的那样不断地燃烧。有没有办法把速度限制在30或60帧?我将非常感谢任何帮助或想法。如果逻辑运行得太快,我的游戏就完了:( 更新 随着一些A

我有一个2008年的Flash游戏。这几天它跑得超快。事实上太快了。我在FlashDevelop中将其设置为60fps,但我认为这只是限制了draw调用的数量。我认为这些天我的逻辑每秒执行60次以上。我已经有一段时间没有编写ActionScript了,但我注意到我正在使用一个enterFrameHandler来执行我的逻辑循环。它似乎没有任何约束。它就像我所说的那样不断地燃烧。有没有办法把速度限制在30或60帧?我将非常感谢任何帮助或想法。如果逻辑运行得太快,我的游戏就完了:(

更新
随着一些ActionScript知识的回归,我想到了一些事情。enterFrameHandler不受Flash或FlashDevelop中项目属性下fps设置的约束吗?有人能确认吗?这意味着我的绘图调用和逻辑调用是1:1对吗?

事实上,enterFrameHandler只在呈现e帧(在您的情况下为60Hz)

如果你可以通过测量时间来限制某件事情的执行次数,比如:

// A property to store the last time the code was executed
protected var lastTimeCalled:int;

// Inside your enterFrame handler
protected function onEnterFrameHandler(e:Event): void {
    var ti:int = getTimer(); // Get current time
    var desiredFPS:Number = 60; // Actual framerate you want
    var frameInterval:Number = 1000 / desiredFPS; // Desired ms per frame

    if (isNaN(lastTimeCalled) || ti >= lastTimeCalled + frameInterval) {
        // Execute code here
        ...

        // Increase time (by chunks of fixed size for framerate self-adjustment)
        lastTimeCalled = isNaN(lastTimeCalled) ? ti : lastTimeCalled + frameInterval;
    }
}

不过,请注意,如果您的SWF的帧速率设置为60,尝试将desiredFPS设置为60不会有任何效果;这可能只会导致某些帧被删除。这可能是测试enterFrame处理程序是否在其他地方被调用的一个好方法。

作为一个附带说明,如果有人想在本地降低速度,他们可以使用作弊英语ne的speedhack功能。至于为你的flash游戏发行版这么做,我不知道。我尝试过将我的fps从60更改为45和30,它似乎工作得很好。我认为这只是一种错觉,我的游戏逻辑似乎比draw调用执行得更快。我想我可以走了。你的代码是指确保我的ga的一种方法吗无论我的帧速率是高还是低,me logic循环都是均匀执行的?Zeh的代码是在帧事件中执行游戏逻辑的一种方式,但如果上一个事件是最近发生的,则跳过它。(顺便说一句,乍一看,它需要一些调整才能正常工作-如果以60fps的速度发布,并将所需的fps设置为45,则此代码只需跳过每隔一帧,剩下30fps。)但是在任何情况下,在帧事件中执行逻辑并降低发布的FPS绝对是解决问题的最简单、最直接的方法。如果您以45 FPS的速度发布,并且机器能够达到60 FPS,那么Flash Player将通过这种方式处理速度如何均匀调节的细节。fenomas:不,代码正确编写以适应这些情况(仔细查看最后一行代码)。如果以60fps的速度发布,并将desiredFPS设置为45,则会以45(平均)的速度运行enterFrame处理程序块而不是30fps-试试看。user464095:代码只是确保逻辑不会超出需要运行;它基本上限制了执行。如果以50fps的速度发布SWF,但将desiredFPS设置为60,它仍将以50的速度运行,因为它仍然受到对事件处理程序的调用数量的限制。这样可以避免多余的执行但它不能在需要时强制执行额外的调用(至少不能使用此代码)。