0

私はandengineや、Androidゲームの開発に不慣れです。ボックスとしてスプライトを作成しました。このコーディングを使用して、このボックスをドラッグできるようになりました。それはうまくいきます。

しかし、私はこれにマルチタッチをしたいのですが、そのボックス内で2本の指でスプライトを回転させたいので、ドラッグ可能である必要があります。....plzは誰かを助けます...

私はこれを何日も試していますが、わかりません。

   final float centerX = (CAMERA_WIDTH - this.mBox.getWidth()) / 2;

   final float centerY = (CAMERA_HEIGHT - this.mBox.getHeight()) / 2;
     Box= new Sprite(centerX, centerY, this.mBox,
            this.getVertexBufferObjectManager()) {

     public boolean onAreaTouched(TouchEvent pSceneTouchEvent,
                float pTouchAreaLocalX, float pTouchAreaLocalY) {
           this.setPosition(pSceneTouchEvent.getX() - this.getWidth()/ 2,
                           pSceneTouchEvent.getY() - this.getHeight() / 2);

             float pValueX = pSceneTouchEvent.getX();
            float pValueY = CAMERA_HEIGHT-pSceneTouchEvent.getY();

            float  dx = pValueX -  gun.getX();
            float  dy = pValueY -  gun.getY();

             double  Radius = Math.atan2(dy,dx);
             double Angle = Radius * 360 ;

                Box.setRotation((float)Math.toDegrees(Angle));
                 return true;
        }
4

1 に答える 1

1

ゲームでマルチタッチが有効になっていることを確認してください。メソッドでは、 MultiTouchExampleで使用されているのと同じコードを使用できますonLoadEngine

アルゴリズムは非常に単純で、ここに投稿したものと似ています。

  1. メソッドで取得した最大2つのポインタIDを追跡しますonAreaTouched。(を呼び出すことでポインタIDを取得できますpSceneTouchEvent.getPointerID())。
  2. pTouchAreaLocalXポインタの状態(現在触れている/触れていない)と場所(および)を追跡しますpTouchAreaLocalY
  3. 2つのポインターが接触しているときはいつでも(ACTION_DOWN両方で受け取った)、初期角度を保存します。(Math.tan2(pointer1Y - pointer2Y, pointer1X - pointer2X))。
  4. ポインターに対して呼び出されない限りACTION_UP、ポインターのすべてのイベントで新しい角度を更新しACTION_MOVE、角度デルタ(delta = currentAngle - initialAngle)を取得します。次に、を呼び出しますsetRotation(Math.toDegrees(delta))

スプライトを2つのポインターでドラッグ可能にするには、各ポインターが移動した距離の小さい方にスプライトを移動する必要があります。たとえば、次の場合:

pointer1.dX = 50;
pointer1.dY = -20;
pointer2.dX = 40;
pointer2.dY = -10;

スプライトは、X軸で+40単位、Y軸で-10単位移動する必要があります。

于 2012-11-22T13:41:18.893 に答える