Android SurfaceView触摸延迟的解决方法

时间:2013-04-16 07:46:47

标签: android surfaceview ontouchevent

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

0 个答案:

没有答案