なので、私が作ろうとしているのはちょっとした宇宙ゲームです。画面上のジョイスティックで触ってドラッグして船をコントロールします。私はこれをうまく動作させるようにしました。私が武器を発射するために画面の上部に触れる機能を追加しようとすると、問題が発生します。何らかの理由で、現在ジョイスティックをドラッグしていると、他のタッチ入力を無視して何もしないように見えます(しかし、ジョイスティックを止めるとうまくいきます)。 これは初めてのことです。それはおそらく何かばかげているが、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(イベント)です。
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ということです。
Ohh大丈夫です。つまり、onTouchEventは+ finger入力が2つあっても一度呼び出されます。私はonTouchEventが各入力に対して一度呼び出されると考えました。ありがとう! – Brasou
実際にonTouchEvent()は各入力に対して1回呼び出されますが、ACTION_(POINTER_)DOWN/UPにIDを記録し、それが正しい指であるかどうかを確認するためにACTION_MOVEが呼び出されるたびに指のポインタIDと比較する必要があります。 – Jasoneer