1

使用 andengine 我正在尝试创建一个足球游戏,当球进入球门并从屏幕上消失时,我想更新得分并将球重新定位在屏幕中央。更新分数在运作良好,但不是重新定位。这是球的代码:

    final AnimatedSprite ball;
    final Body bodyBall;
    ball = new AnimatedSprite(centerX, centerY,this.mBallTextureRegion, this.getVertexBufferObjectManager());
    bodyBall = PhysicsFactory.createBoxBody(this.mPhysicsWorld, ball, BodyType.DynamicBody, FIXTURE_DEF);
    ball.setUserData(bodyBall);
    ball.animate(200);
    this.mScene.registerTouchArea(ball);
    this.mScene.attachChild(ball);
    this.mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector(ball, bodyBall, true, true));

这里是检查目标的代码:

    @Override
    public void onUpdate(final float pSecondsElapsed) {
        if(UpperGoal.collidesWith(ball)) {
            ScoreA = ScoreA+1;
            ScoreText.setText(ScoreA+" - " + ScoreB);
            bodyBall.setTransform(new Vector2(CAMERA_WIDTH/2,CAMERA_HEIGHT/2),0);               
            UpperGoal.setColor(1, 0, 0);

我也尝试了 bodyBall.setPosition(100,100,0)。

4

2 回答 2

1

Body 类没有方法 setPosition。要设置新坐标,请使用

bodyBall.setTransform(new Vector2(x/32,y/32), 0);

您需要除以 32,因为 box2d 不以像素为单位

于 2013-05-19T19:23:17.293 回答
0

setTransform 正在工作,但它的值应除以像素与米的比率,默认为 32.0f,或者您可以使用 PhysicsConstants.PIXEL_TO_METER_RATIO_DEFAULT。另请注意,setTransform 使用主体的中心作为锚中心,因此如果您使用 GLES2 分支(不是 GLES2-AnchorCenter),您应该减去精灵宽度和高度的一半,例如:

yourBody.setTransform((yourNewX - yourSprite.getWidth() / 2) / PhysicsConstants.PIXEL_TO_METER_RATIO_DEFAULT, (yourNewY - yourSprite.getHeight() / 2) / PhysicsConstants.PIXEL_TO_METER_RATIO_DEFAULT, yourBody.getAngle());
于 2013-05-22T14:06:56.913 回答