我正在制作一个蛇游戏,并且在蛇的每个蜱虫上移动。因为蛇在每个刻度上移动整个单位,动画是跳跃的。游戏在一个无形的网格上,所以蛇只能在特定点改变方向。
更好的做法是设置一个计时器,一次将蛇移动一个像素,用一个变量计算它,并在每n个刻度运行代码以改变方向。或者最好有两个独立的计时器;一个用于一次移动蛇一个像素而另一个用于改变蛇的方向?
答案 0 :(得分:0)
基本上,你正在创建一个“游戏循环”来更新displayList(在Actionscript中)并重新绘制你的视图。当游戏变得复杂时,定时器和侦听ENTER_FRAME事件将被限制为用于屏幕刷新的flashplayer设置(即它的FPS)和CPU的渲染基于其负责处理的内容。
对于帧速率独立动画,您应该使用ENTER_FRAME的组合来跟踪毫秒和GetTimer()调用,以更准确地(到毫秒)调用动画,并在各种平台上规范化体验。
基本上,侦听ENTER_FRAME事件,检查自上次更新以来的当前毫秒数,如果它超过刷新率(以毫秒计),则触发动画/状态更新:检查蛇碰撞检测是否为“方向块“ - 处理如果为真,则更新蛇的运动/位置/状态。
Flash会更新显示列表,无论其设置如何,以及与CPU /机器相关的问题。我发现,关键是要确保你将更新的速度标准化,以使体验保持一致。定时器有其用途,但可能导致内存性能问题。 ENTER_FRAME与主时间轴/帧速率设置同步。
对于3年前过时但有趣的讨论,check out this post from actionscript.org。