Я работаю над 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) {
//...
}
}