如何让身体移动到触摸位置?

时间:2013-03-04 04:48:21

标签: android box2d andengine

您好我正在尝试制作空气曲棍球型游戏,但我在实施桨式运动组件时遇到了麻烦。如何使用setLinearVelocity将body(桨)移动到触摸位置,使用box2d扩展名为andengine?当我尝试这样做时,球会以看似随机的方式移动。

这是我尝试过的。

@Override
    public boolean onSceneTouchEvent(Scene pScene, TouchEvent p) {

            if(p.isActionDown()){
                moveAir(p.getY(),p.getX());
            }else if(p.isActionMove()){
                moveAir(p.getY(),p.getX());
            }else if(p.isActionUp()){
                myPad.setLinearVelocity(0, 0);
            }


        return false;
    }

    private void moveAir(float y, float x) {
        x=x/32;
        y=y/32;



        if(myPad.getLocalCenter().x>x){
            myPad.setLinearVelocity(myPad.getLinearVelocity().x-10, myPad.getLinearVelocity().y);
        }else if(myPad.getLocalCenter().x<x){
            myPad.setLinearVelocity( myPad.getLinearVelocity().x+10,  myPad.getLinearVelocity().y);
        }else{
            myPad.setLinearVelocity(0, myPad.getLinearVelocity().y);
        }


        if(myPad.getLocalCenter().y>y){
            myPad.setLinearVelocity(myPad.getLinearVelocity().x,myPad.getLinearVelocity().y-10);
        }else if(myPad.getLocalCenter().y<y){
            myPad.setLinearVelocity( myPad.getLinearVelocity().x,myPad.getLinearVelocity().y+10  );
        }else{
            myPad.setLinearVelocity(myPad.getLinearVelocity().x, 0);
        }
    }

2 个答案:

答案 0 :(得分:3)

Box2D有一种特殊类型的关节,正是这种类型的交互。 您想在触摸的对象上使用“mousejoint”。

andengine论坛上已有一个很好的mousejoint教程: http://www.andengine.org/forums/tutorials/tut-box2d-mousejoint-drag-and-drop-t1156.html

答案 1 :(得分:1)

感谢您的建议,但我发现使用setLinearVelocity比使用鼠标关节更简单:

float linearVelocityX = (TouchX - myBody.getPosition().x);
float linearVelocityY = (TouchY - myBody.getPosition().y);
Vector2 linearVelocity = new Vector2(linearVelocityX, linearVelocityY);
myPad.setLinearVelocity(linearVelocity);