ACTION_CANCEL генерируется и теряет данные - PullRequest
0 голосов
/ 27 июня 2018

Я работаю над 2D-игрой для Android, в которой используются 3 пальца, один / два находятся на экране, другие тронуты и отпущены. Некоторые виды использования пальцев, некоторые быстро. это игра, в которой персонаж ходит / бегает, прыгает, стреляет ...

Моя проблема в том, что работает нормально, но иногда генерируется ACTION_CANCEL, и я теряю данные о пальцах.

Например, если я нажимаю одновременно 3 пальца, которые я обнаруживаю на 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) {
        //...
    }

}
...