我正在使用这些教程在使用这些教程的反对谷物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语句你贴,看看触摸事件被记录在所有的代码段后。 –