5

我已经完成了一个功能性 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
            }
        }
}
4

0 回答 0