所以我試圖製作的是一個小型的太空遊戲,你可以通過觸摸和拖動來控制船上的圖形屏幕上的遊戲杆。我已經得到這個工作正常。一旦我開始嘗試並添加觸摸屏幕頂部以發射武器的能力,就會出現問題。出於某種原因,如果您當前正在拖動遊戲杆,它似乎忽略其他觸摸輸入並且什麼都不做(但是,一旦我停止拿着遊戲杆,它就可以正常工作) 這是我第一次使用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