我试图在以相机为中心的玩家游戏中实现操纵杆。 操纵杆是否增加" dx"或" dy"。 我创建了一个GameControls类来处理GameSurfaceView的所有触摸。 当我触摸屏幕并移动手指时,一切正常,但当我停止时,onTouch事件将停止被触发。
public void handleMultitouch(MotionEvent event)
{
int ptrId=-1;
int action = event.getAction();
switch (action & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
point.x=(int) event.getX();
point.y=(int) event.getY();
if(joystickEntidade.colide(point))
{
c++;
Log.e("down",event.getPointerId(0) +"");
idJoystick=action;
JSdown(point.x,point.y);
}
break;
case MotionEvent.ACTION_UP:
point.x=(int) event.getX();
point.y=(int) event.getY();
if(event.point(0)==point)
{
c=0;
JSup(event);
idJoystick=-1;
}
else
Sup(point.x,point.y);
break;
case MotionEvent.ACTION_POINTER_DOWN:
ptrId = action >> MotionEvent.ACTION_POINTER_INDEX_SHIFT;
int ptrIdx = event.findPointerIndex(ptrId);
point.x=(int) event.getX(ptrIdx);
point.y=(int) event.getY(ptrIdx);
if (joystickEntidade.colide(point))
{
idJoystick=ptrId;
JSdown(point.x,point.y);
}
else
Sup( point.x,point.y);
break;
case MotionEvent.ACTION_POINTER_UP:
ptrId = action >> MotionEvent.ACTION_POINTER_INDEX_SHIFT;
/*if (joystickEntidade.colide(pontoEntidade))
JSup(event);
else*/
pontoEntidade.x=(int) event.getX(ptrId);
pontoEntidade.y=(int) event.getY(ptrId);
if(idJoystick==ptrId)
{
JSdown(pontoEntidade.x,pontoEntidade.y);
}
/* Log.e("APU", (int)event.getX(ptrId)+"-"+(int)event.getY(ptrId));*/
break;
case MotionEvent.ACTION_MOVE:
point.x=(int) event.getX();
point.y=(int) event.getY();
for(int i = 0; i < event.getPointerCount(); ++i)
if(event.getPointerId(i)==idJoystick)
{
c--;
JSdown(point.x,point.y);
}
break;
default:
break;
}
即使我没有移动手指,有没有办法继续跟踪手指位置?
答案 0 :(得分:1)
记住最后的位置。仅当手指位置发生变化时才会调用onTouchListener,而不是经常调用。所以,如果它仍然没有,将不会打电话。如果它没有触及,则不会打电话。这就是Android的工作方式,你需要以这种方式工作。