我正在开发一款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) {
//...
}
}