我正在使用四个同时按键的游戏。它一切正常,除了当按键被快速按下时,我的帧速率显着减慢(如果我甚至只敲一个键,我可以减半)。键盘监听器正在杀死我的帧速率
我最初只是假设在按键触发器的方法中发生了太多的事情,但如果我完全将方法从代码中取出,减速仍然会发生。
有没有人遇到过这个?按键就是您按下按键的按键,因此它会每隔一帧重复发出一次方法调用,但这对于许多用途来说是非常标准的,而我以前从未遇到过这种情况。
编辑:澄清。 在结构上,有连接到舞台上的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。
这个问题实际上是在按下或释放按键的确切时刻,有一个几乎察觉不到的框架下降。反复按键会导致framedrop变得越来越糟。按下按键不会消除帧率,除了按下按键时的单个分割秒帧丢弃之外。之后,比赛继续进行。放弃关键会导致另一个小小的障碍,然后帧速率恢复正常。
编辑2 - 我添加了一个帧速率检查器,以便我可以准确地看到帧速率发生了什么。有趣的是,即使按下按键的速度非常快,我也无法使它低于30fps。在Flash Player中播放有什么限制吗?
除非您向我们展示您的一些代码,否则无法真正了解发生了什么事情:添加侦听器的位置以及触发时的操作。 – weltraumpirat 2012-07-15 11:23:41
我会澄清我的问题,坚持 – 2012-07-15 14:21:43
因此,这将是每个关键击中两个函数调用...我不认为这覆盖了所有,或者它呢?怎么样“每个帧触发一个方法调用”? – weltraumpirat 2012-07-15 14:24:53