所以我试图制作的是一个小型的太空游戏,你可以通过触摸和拖动来控制船上的图形屏幕上的游戏杆。我已经得到这个工作正常。一旦我开始尝试并添加触摸屏幕顶部以发射武器的能力,就会出现问题。出于某种原因,如果您当前正在拖动游戏杆,它似乎忽略其他触摸输入并且什么都不做(但是,一旦我停止拿着游戏杆,它就可以正常工作) 这是我第一次使用java,并且对于Android来说,它可能是愚蠢的,但是iv已经停留了几天。 无论如何,在这里我的代码。下面Android多点触控事件问题...拖动时没有新的触摸事件?
是从我
公共类面板延伸SurfaceView实现SurfaceHolder.Callback {
@Override
public boolean onTouchEvent(MotionEvent event) {
fingers= event.getPointerCount(); //Returns 1 or 2 properly if 2 fingers on screen
playership.onTouchEvent(event); //Pass the event along to the spaceship object
return true;
//return super.onTouchEvent(event); //no idea what this does, but it seems to disable the drag event
}
下面是playership.onTouchEvent(事件);功能
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction())
{
case MotionEvent.ACTION_DOWN:
if(event.getY()<(Panel.mHeight-150))
{
Laser1.reset(mX,mY,(int)event.getX(),(int)event.getY());
}
break;
}
joy1.onTouchEvent(event);
return true;
}
下面是joy1.onTouchEvent(event);
public boolean onTouchEvent(MotionEvent event) {
int eventaction = event.getAction();
//Offset between mouse(x,y) and center
double offx=oX-event.getX();
double offy=oY-event.getY();
double d=Math.sqrt((offx*offx)+(offy*offy));
switch (eventaction)
{
case MotionEvent.ACTION_DOWN:
if(d<dragrange) //Start Dragging if clicked
{
offx=offx/d;
offy=offy/d;
Dragging=true;
reset = false;
dX=(int) (offx*dragrange);
dY=(int) (offy*dragrange);
}
break;
case MotionEvent.ACTION_MOVE:
if(Dragging)//if joy is already being draged, update it.
{
offx=offx/d;
offy=offy/d;
if(d>dragrange)
{
dX=(int) (offx*dragrange);
dY=(int) (offy*dragrange);
}
else
{
dX=(int) (offx*d);
dY=(int) (offy*d);
}
reset = false;
}
break;
case MotionEvent.ACTION_UP:
if(Dragging)
{
Dragging=false;
}
break;
}
return true;
}
所以,是的,问题是,如果操纵杆的情况下中间MotionEvent.ACTION_MOVE它似乎无法正常登录阻止任何其他触摸事件。
哦,好吧!换句话说,即使有两个+手指输入,onTouchEvent只会被调用一次。我认为onTouchEvent将会为每个输入调用一次。谢谢! – Brasou
其实每次输入都会调用一次onTouchEvent(),但是您必须在ACTION_(POINTER_)DOWN/UP上记录该ID,并且每次调用ACTION_MOVE时都会将其与手指的指针ID进行比较,以查看它是否是正确的手指。 – Jasoneer