我正在开发一个使用四个同时按键的游戏。一切都很好,除了当快速按下键时,我的帧速率会显着减慢(如果我只敲击一个键,我可以将帧速率减半)。
我最初只是假设按键触发的方法中发生了太多事情,但是如果我将代码完全从方法中取出,仍然会出现减速。
有没有人遇到过这个?按键是您按住键的地方,因此它每帧都会重复触发一个方法调用,但这对于许多用途来说是相当标准的,我以前从未遇到过这种情况。
编辑:澄清。从结构上讲,舞台上附加了一个 KEY_DOWN 和 KEY_UP 侦听器:
stage.addEventListener(KeyboardEvent.KEY_DOWN, menuKeyDown);
stage.addEventListener(KeyboardEvent.KEY_UP, menuKeyUp);
然后调用一个带有单个 switch 语句的方法,其中包含如下五行:
case ONE: pressing1 = true; break;
有一个 ENTER_FRAME 事件检查是否有任何布尔标志为真,并处理角色移动。无论按键如何,都会发生此计算(即,如果您松开按键,重力仍然会产生影响)。这很容易保持60fps。
问题实际上是在按下或释放键的那一刻,几乎无法察觉的丢帧。反复按键会导致丢帧越来越严重。按住一个键不会杀死帧速率,除了按下该键时的单个瞬间丢帧。之后比赛照常进行。放开键会导致另一个小故障,然后帧率恢复正常。
编辑 2 - 我添加了一个帧率检查器,这样我就可以准确地看到帧率发生了什么。有趣的是,即使我非常快速地按键,我也不能让它低于 30fps。Flash Player 是否有某种限制?