Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用多点触控旋转对象_Android_Sprite_Andengine - Fatal编程技术网

Android 使用多点触控旋转对象

Android 使用多点触控旋转对象,android,sprite,andengine,Android,Sprite,Andengine,我对andengine甚至android游戏开发都是新手。我已经创建了精灵作为一个盒子。现在可以使用此编码拖动此框。它很好用 但我想要多点触控,我想在这个盒子里用2个手指旋转一个精灵,甚至它应该是可拖动的。。。。请帮助某人 我尝试了很多天,但不知道 final float centerX = (CAMERA_WIDTH - this.mBox.getWidth()) / 2; final float centerY = (CAMERA_HEIGHT - this.mBox.getH

我对andengine甚至android游戏开发都是新手。我已经创建了精灵作为一个盒子。现在可以使用此编码拖动此框。它很好用

但我想要多点触控,我想在这个盒子里用2个手指旋转一个精灵,甚至它应该是可拖动的。。。。请帮助某人

我尝试了很多天,但不知道

   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;
        }

确保在游戏中启用了多点触摸。您可以在
onLoadEngine
方法中使用中使用的相同代码

算法非常简单,类似于您在这里发布的内容

  • 跟踪在重新触摸方法中获得的最多2个指针ID。(您可以通过调用
    pSceneTouchEvent.getPointerID()
    )来获取指针ID)
  • 跟踪指针的状态(当前正在触摸/未触摸)和位置(
    pTouchAreaLocalX
    pTouchAreaLocalY
  • 每当两个指针接触时(您收到了两个指针的
    ACTION\u DOWN
    ),保存初始角度。(
    Math.tan2(pointer1Y-pointer2Y,pointer1X-pointer2X)
  • 只要指针未调用
    ACTION\u UP
    ,则在指针的每个
    ACTION\u 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个单位。

    Plz有人能澄清这个疑问吗。这对所有安卓用户都很重要。你能为它提供代码吗?我不明白如何获得两个指针ID?当我用两个手指触摸并通过pSceneTouchEvent.getMotionEvent.getCount()计数时;所以它给出了1。如果我写pSceneTouchEvent.getPointerID());然后它给出了第一个指针id,如何获得第二个指针id?我查看了
    MultiTouchController.java
    的代码,然后引擎为
    MotionEvent
    中的每个指针触发一个
    TouchEvent
    ,所以你应该得到两个对你的touch-event方法的调用。有人能发布如何做的事情吗