1
4
Tinic Uro(Flash播放器工程师)已经编写了 interesting blog 关于这个问题的帖子。 |
2
2
在使用timer类的过程中,我将把更新代码放入并输入frame eventliewer。 然后使用getTimer(),找出自上次更新以来经过的时间,然后使用一点数学计算移动、激光“产卵”等。这样,无论您获得60fps或10fps,游戏都应该执行相同的操作。 这也可以防止奇怪的游戏行为,如果FPS暂时下降,或如果游戏运行在一个缓慢的机器上。 在大多数情况下,数学是相当简单的,如果不是,你通常可以“抄近路”,仍然可以得到一个足够好的结果,一场比赛。 对于简单移动,您可以简单地将移动偏移量乘以自上次更新以来的时间。对于加速度,你需要一个二次方程,但可以简化为再乘以。 针对以下Jorelli评论: 更好的代码可以解决碰撞检测问题,不仅可以检查当前状态,还可以检查前一状态和当前状态之间发生的情况。 我从来没有遇到过键盘问题。也许你应该试试这个漂亮的小班: http://www.bigroom.co.uk/blog/polling-the-keyboard-in-actionscript-3 |
3
1
我刚刚尝试运行您的示例代码,除了作为一个框架脚本之外,其他代码都是一样的,我所坐的计时器的工作方式和您所期望的完全一样。用一个30毫秒的计时器,平均值约为33-34,用一个3毫秒的计时器,平均值约为3.4或3.5。有了一个1毫秒的计时器,我可以在1000多次试验中获得1.4到1.6。它在闪存和浏览器中都是这样工作的。 因此,关于准确性,请参见《卢克答案》中天宁公司的博客帖子。但是对于频率的上限,如果你的事件间隔不超过16毫秒,只有你发布的示例代码,那么可能是一些奇怪的事情,或者可能是你的浏览器给出闪光计时信息的速度的上限。如果您在实际的游戏中得到这些结果,我认为您只需要使用同步代码来阻止计时器事件。 还有一件事-我知道这不是你所要求的,但是用一个输入帧处理程序处理游戏逻辑会更明智。不管产生激光的代码是每30毫秒运行一次还是每3毫秒运行一次,屏幕每帧只重绘一次(除非你强迫它更频繁地更新,这可能是你不应该的)。因此,屏幕刷新之间发生的任何事情都只是开销,会降低整体帧速率,因为只要稍微聪明一点,就可以获得与更频繁执行的计时器完全相同的结果。例如,您可以每隔30毫秒生成10个激光器,而不是每隔3毫秒生成一个激光器,并沿其飞行路径移动每个激光器一定距离,就好像它是3、6或9毫秒前创建的一样。
另一种让你的逻辑脱离框架事件的自然方法是制作一个“理论上”每T毫秒运行一次的游戏循环。然后,在你的
|
4
1
BitmapData.Scroll和BitmapData.CopyPixels是当前在Flash中呈现的最快方式,尽管在一些系统中,使用带有GPU加速的movieclips速度稍快。在OpenGL中,每一个四边形都被渲染为一个单独的纹理,因此它不是普通GPU加速应用程序所期望的。我知道,因为我在我的游戏中对这两种方式都进行了描述。您可以做的一件事是从输入事件处理程序调用游戏更新来提高响应时间。这样,即使在游戏的帧速率较低的情况下,您也能听到正确的定时声音,应用程序也会感觉到更灵敏的响应。 |
5
0
我想说,你很幸运能得到这样的fps,而且你的大多数用户(假设你的用户是互联网上的广大用户)将很可能无法达到这种帧速率。 我同意,flash播放器的能力可能不足以满足你想要达到的目标。 |
nabster023 · 拉伸和旋转电影剪辑而不失真 6 年前 |
Dimentio · 无限循环(动作脚本3) 6 年前 |
AeroKLiam · AS3-使用组合框进行真/假测验 6 年前 |
nabster023 · 自动检测AS3中输入文本字段的值 7 年前 |
TheGunners · 查找两条圆弧之间的交点 7 年前 |