我正在使用四個同時按鍵的遊戲。它一切正常,除了當按鍵被快速按下時,我的幀速率顯着減慢(如果我甚至只敲一個鍵,我可以減半)。鍵盤監聽器正在殺死我的幀速率
我最初只是假設在按鍵觸發器的方法中發生了太多的事情,但如果我完全將方法從代碼中取出,減速仍然會發生。
有沒有人遇到過這個?按鍵就是您按下按鍵的按鍵,因此它會每隔一幀重複發出一次方法調用,但這對於許多用途來說是非常標準的,而我以前從未遇到過這種情況。
編輯:澄清。 在結構上,有連接到舞臺上的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