代码之家  ›  专栏  ›  技术社区  ›  pindleskin

在SceneTouchEvent上移动身体

  •  0
  • pindleskin  · 技术社区  · 13 年前

    我试图将一个物体从其初始位置移动到onTouchEvent x和y。问题是物体朝着错误的方向移动。有人能告诉我我的错误在哪里吗?

    到目前为止,这是我的代码:

    public boolean onPlayerTouchEvent(final Scene pScene,
                        final TouchEvent pSceneTouchEvent) {
    
                final float pValueX = pSceneTouchEvent.getX();
                final float pValueY = pSceneTouchEvent.getY();
                final float rotation = (float) Math.atan2(pValueX, pValueY);
                final float xComp = (float) Math.sin(rotation);
                final float yComp = (float) Math.cos(rotation);
    
                if (pSceneTouchEvent.isActionDown()) {
                        this.mPlayerBody.setLinearVelocity(new Vector2(xComp, yComp));
                } else if (pSceneTouchEvent.isActionMove()) {
    
                } else if (pSceneTouchEvent.isActionUp()) {
                        this.mPlayerBody.setLinearVelocity(new Vector2(0, 0));
                }
    
                return true;
        }
    
    1 回复  |  直到 13 年前
        1
  •  2
  •   Divyang Metaliya    13 年前

    你的旋转(角度)方程式错了。

    试试下面的代码。 //touchX和touchY全局变量

    public boolean onPlayerTouchEvent(final Scene pScene,
                    final TouchEvent pSceneTouchEvent) {
    
         if (pSceneTouchEvent.isActionDown()) {
            touchX = pSceneTouchEvent.getX();
            touchY = pSceneTouchEvent.getY();
    
        } else if (pSceneTouchEvent.isActionMove()) {
            final float pValueX = pSceneTouchEvent.getX()-touchX ;
            final float pValueY = pSceneTouchEvent.getY()- touchY;
            final float rotation = (float) Math.atan2(pValueY, pValueX);
            final float xComp = (float) Math.cos(rotation);
            final float yComp = (float) Math.sin(rotation);
            this.myBall.getBallBody().setLinearVelocity(
                    new Vector2(xComp, yComp));
        } else if (pSceneTouchEvent.isActionUp()) {
            myBall.getBallBody().setLinearVelocity(new Vector2(0, 0));
        }
    
            return true;
    }