我正在使用這些教程在使用這些教程的反對穀物http://obviam.net/index.php/table-of-contents/的Android遊戲上工作,我的程序突然決定每當我觸摸屏幕時發生ANR Key Dispatching Timed Out錯誤。Android遊戲編程,SurfaceView輸入事件上的KeyDispatchingTimedOut錯誤
基本上我有一個MainMenuThread類,它擴展了主線遊戲循環的線程,只需在我的MainMenuPanel中調用更新和渲染函數,它可以擴展SurfaceView並處理實際的遊戲。
我加載了一堆方形按鈕的圖像,從屏幕頂部到底部,然後顯示4個其他圖像,這些圖像是按鈕並閃爍屏幕(簡單的lerp和調用canvas .drawARGB)。一旦完成,當用戶按下其中一個方格作爲背景時,它會變成被按下的正方形的圖像,這確實起作用。起初,我在一些代碼中入侵了觸摸事件循環遍歷每個背景中的每個方塊,檢查事件座標是否在其上並作出相應反應,現在我已經將其更改爲更精簡,但出於某種原因,我一直在一次KeyDispatchingTimedOut每次我觸摸屏幕。
我在我的四核心機器上運行這個模擬它一切都很好(在流線之前)我現在正在研究我的上網本,它甚至無法運行android虛擬設備,所以我正在調試我的手機(HTC Hero)。
我搜索周圍的答案,發現有人說這可能是因爲它做了太多的工作,所以我停止繪製正方形背景,並在每個觸摸事件上向logcat輸出消息,但我仍然遇到同樣的問題,我也嘗試在每個觸摸事件上啓動一個新線程,爲我處理這個事件,但沒有解決它。我在谷歌搜索中看到的唯一另外一件事是人們說,如果表面不再存在,那麼android可以吐出這個錯誤,但它幾乎可以肯定。
我能想到要說的唯一的另一件事是,它甚至沒有進入我的邏輯,我的代碼是:
if(event.getAction() == MotionEvent.ACTION_DOWN)
{
Log.d(TAG, "Touch event registered");
int x = (int)event.getX()/squareSize;
int y = (int)(getHeight() - event.getY())/squareSize;
squares[x][y].setTouched(true);
}
和「觸摸事件註冊」的消息是從來沒有輸出。
預先感謝能夠提供,並且這是我的第一個問題就在這裏,我希望這不是太長篇大論/無關的任何幫助。
嘗試把一個else語句你貼,看看觸摸事件被記錄在所有的代碼段後。 –