在游戏线程上处理MotionEvent

时间:2015-11-29 19:57:37

标签: java android multithreading

我正在为Android开发游戏,并使用以下方法将视图上捕获的MotionEvent传递给游戏进行处理。

@Override
public boolean onTouchEvent(MotionEvent event){
    game.input(event);
    return true;
}

使用View#onDraw方法更新和绘制游戏:

@Override
public void onDraw(Canvas canvas){
    game.update();
    game.draw(canvas);
    this.invalidate();
}

如您所知,android在单独的线程上处理输入和渲染,因此MotionEvent可以在渲染帧时或在逻辑更新后传递给游戏。这不适合我在游戏中处理输入的方式。

我已经尝试在ArrayList中排队事件并在游戏的更新方法中处理它们。但是,正如预期的那样,在处理队列中的项目后清除队列时,这会导致并发修改异常。

我很感激有关如何使排队系统工作的任何帮助或任何其他方法。

1 个答案:

答案 0 :(得分:1)

如果我正确地理解了你的问题,那就是建筑学。您需要使用SurfaceView。探索此资料:http://obviam.net/index.php/a-very-basic-the-game-loop-for-android/ 您需要一个例子:

enter image description here

有用的材料仍然在这里: View vs SurfaceView for android game