Search code examples
androidandenginegame-physics

moving body onSceneTouchEvent


I am trying to move a body from its initial position to the onTouchEvent x and y. The problem is that the body is moving in a wrong direction. Could someone tell me where is my mistake?

This is my code so far:

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

Solution

  • your rotation (angle) equation in wrong.

    try below code . // touchX and touchY global variable

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