我已经完成了一个功能性 Android 游戏的编程,但我不知道在哪里可以修复触摸延迟:每当触摸屏幕时,帧率都会下降一半。我的代码基本上是带有 onTouchEvent 的 LunarLander 的复制和粘贴。
谷歌搜索向我展示了他们说有效但无效的基本解决方法(睡眠 onTouchEvent、onDispatchEvent、onInterceptTouchEvent、同步等),而且在触摸事件期间似乎不可能在没有巨大延迟的情况下使用 SurfaceView。
我应该怎么办?我应该放弃 SurfaceView,禁用 onTouchEvent 并使用 clickListener,以某种方式阻止快速触摸调用吗?请告诉我怎么了!
我试过了:
- 使 onTouchEvent() 不运行任何代码并返回 false
- 休眠 onTouchEvent() 或 run() 16/32/1000 毫秒,没有区别
- 覆盖 onDispatchevent() 而不是 onTouchEvent()
- 在 onTouchEvent() 中试验 synchronized()
这是我的代码:
public class Surface extends SurfaceView implements SurfaceHolder.Callback {
public CanvasThread canvasThread;
private SurfaceHolder surfaceHolder;
public Surface(Context context) {
super(context);
surfaceHolder = getHolder();
surfaceHolder.addCallback(this);
setFocusable(true);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return canvasThread.touch(event);
}
class CanvasThread extends Thread {
@Override
public void run() {
synchronized (this) {
// game logic
}
}
public boolean touch(MotionEvent event) {
// touch logic
}
}
}