1

こんにちは私のアプリでは、上半分の指で上半分の何かを制御し、下半分の指で下半分の何かを同時に制御したい場所があります。だから私はマルチタッチを実装しようとしましたが、ACTION_MOVEを正しく取得できないようです。画面上で2本の指を動かすと、最初に画面に触れた側のオブジェクトのみが移動します。なぜそうなのかしら?これが私のコードです:

 public boolean onTouch(View v, MotionEvent event){
  //needs multitouch
  if(checkInGame()){
      int pointerIndex = 0;
            if(event.getY() < this.getMeasuredHeight() / 2){  
                pointerId1 = event.getPointerId(event.getActionIndex());
                pointerIndex = event.findPointerIndex(pointerId1);
            }else{
                pointerId2 = event.getPointerId(event.getActionIndex());    
                pointerIndex = event.findPointerIndex(pointerId2);
            }

            switch(event.getAction() & MotionEvent.ACTION_MASK){

                case MotionEvent.ACTION_MOVE:{
                    int numPointers = event.getPointerCount();

                    for (int i = 0; i < numPointers; i++){
                        if(event.getY(i) < this.getMeasuredHeight() /2){  
                          Log.d("Touch","Move1");
                          int moveX = 0;
                          int moveY = 0;
                          moveX = (int) event.getX(i) - sX;
                          moveY = (int) event.getY(i) - sY;

                          ship1.setLoc(moveX, moveY);
                          sX = sX + moveX;
                          sY = sY + moveY;
                        }else{
                            Log.d("Touch","Move2");
                              int moveX = 0;
                              int moveY = 0;
                              moveX = (int) event.getX(i) - sX2;
                              moveY = (int) event.getY(i) - sY2;

                              ship2.setLoc(moveX, moveY);
                              sX2 = sX2 + moveX;
                              sY2 = sY2 + moveY;
                        }
                          return true;
                    }

                }
                  case MotionEvent.ACTION_DOWN: {

                        if(event.getY(pointerIndex) < this.getMeasuredHeight() /2){  
                            Log.d("Touch","Top1");
                            sX = (int) event.getX(pointerIndex);
                            sY = (int) event.getY(pointerIndex);
                        }else{
                            Log.d("Touch","Bottom1");
                             sX2 = (int) event.getX(pointerIndex);
                             sY2 = (int) event.getY(pointerIndex);
                        }
                        return true;
                    }

                  case MotionEvent.ACTION_POINTER_DOWN:{
                      if(event.getY(pointerIndex) < this.getMeasuredHeight() /2){  
                            Log.d("Touch","Top2");
                            sX = (int) event.getX(pointerIndex);
                            sY = (int) event.getY(pointerIndex);
                        }else{
                            Log.d("Touch","Bottom2");
                             sX2 = (int) event.getX(pointerIndex);
                             sY2 = (int) event.getY(pointerIndex);
                        }
                        return true;
                  }


            }
4

1 に答える 1

2

returnステートメントはforループ内にあるため、1回だけ繰り返されます。

于 2012-05-18T02:27:41.480 に答える