2011-07-19 24 views
0

我正在使用這些教程在使用這些教程的反對穀物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); 
} 

和「觸摸事件註冊」的消息是從來沒有輸出。

預先感謝能夠提供,並且這是我的第一個問題就在這裏,我希望這不是太長篇大論/無關的任何幫助。

+0

嘗試把一個else語句你貼,看看觸摸事件被記錄在所有的代碼段後。 –

回答

1

事實證明,我的電話是錯誤> :(

0

我知道這是晚了,但還是:

兩件事: 1 - 不要分配x和觸摸事件ÿ整數;因爲現在我認爲你在每個觸摸事件上都會創建兩個新的整數(每秒可能發生60到80次);不是很好爲您的垃圾收集:)

2添加了一個「返回false;」在event.down塊的結尾處。這告訴系統你已經看到了觸摸事件,但有興趣繼續觸摸,所以它會更進一步,並給你event.move的等。 如果你返回true,系統會認爲你已經處理了觸摸事件和對該事件後的任何其他數據不感興趣,因此它結束該動作並開始新的動作。

+0

感謝您的答覆隊友,我很久以前就應該關閉它,我發現問題在於我的手機有問題,或者應該說,我使用的自定義ROM使得手機上的運行和調試應用程序本身不可能,重置爲HTC的官方固件,直到觸摸屏崩潰! – user852713