与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)。
答案 0 :(得分:1)
Body类没有方法setPosition。 要设置新坐标,请使用
bodyBall.setTransform(new Vector2(x/32,y/32), 0);
你需要除以32,因为box2d不以像素为单位
答案 1 :(得分:0)
setTransform正在工作,但它的值应除以像素与米的比例,默认为32.0f,或者您可以使用PhysicsConstants.PIXEL_TO_METER_RATIO_DEFAULT。另请注意,setTransform使用body的中心作为anchorcenter,所以如果你使用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());