ACTION_CANCEL生成并丢失数据

时间:2018-06-27 06:41:57

标签: android touch

我正在开发一款Android 3D游戏,该游戏使用3个手指,一个/两个在屏幕上,其他的被触摸和释放。某些类型的手指使用方式,一些很快。那是角色行走/奔跑,跳跃,射击……

我的问题是运行正常,但有时会生成ACTION_CANCEL,我丢失了手指数据。

例如,如果我同时按下在onTouchEvent上检测到的三个手指:ACTION_DOWN,ACTION_POINTER_DOWN(1),ACTION_POINTER_DOWN(2)和ACTION_CANCEL。

但在正常播放期间,有时也会生成ACTION_CANCEL。手指在屏幕上,但是数据MotionEvent都被取消了。.下次触摸从ACTION_DOWN重新开始。所以我无法管理游戏。

有人知道如何解决我的问题?谢谢

我使用以下(通用)代码:

public class world extends Activity {
    GLSurfaceView glSurfaceView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        this.setVolumeControlStream(AudioManager.STREAM_MUSIC);

        this.glSurfaceView = new worldGL(this);
        setContentView(this.glSurfaceView);
    }

}

class worldGL extends GLSurfaceView {
    world activity;
    world_r renderer;

    public worldGL(Context context){
        super(context);

        this.activity = (world) context;
        this.renderer = new world_r(context);
        setRenderer(this.renderer);

        //...
    }

    @Override
    public boolean onTouchEvent(MotionEvent e) {
        //...

        return true;
    }

}

public class world_r implements Renderer {

    public world_r(Context context) {
        //...
    }

    @Override
    public void onSurfaceChanged(GL10 gl, int w, int h) {
        //...
    }

    @Override
    public void onSurfaceCreated(GL10 gl, EGLConfig config) {
        //...
    }

    @Override
    public void onDrawFrame(GL10 gl) {
        //...
    }

}

0 个答案:

没有答案