【发布时间】:2014-01-10 06:42:10
【问题描述】:
我已经使用 AndEngine 一年了,觉得是时候继续学习一些物理学了。 我按照 AndEngine 物理示例开始了一个滚球游戏,其中一个球在屏幕上滚动,使用加速度计将其引导到一个洞中。 我的球滚动正常,但不能让它掉进洞里。我用谷歌搜索并尝试了所有方法,但我能得到的最好结果是球与球洞相撞,要么弹开,要么滚过球洞。
这里有一些代码。
这是我的球。
ball = new AnimatedSprite(pX, pY,this.mBallFaceTextureRegion,this.getVertexBufferObjectManager());
bodyBall = PhysicsFactory.createCircleBody(this.mPhysicsWorld,ball,BodyType.DynamicBody, FIXTURE_DEF);
bodyBall.setUserData("Ball");
ball.animate(200);
this.mScene.attachChild(ball);
this.mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector(ball, bodyBall, true, true));
Thia 是我的洞。
hole = new Sprite(pX, pY, this.hHoleFaceTextureRegion, this.getVertexBufferObjectManager());
bodyHole = PhysicsFactory.createCircleBody(this.mPhysicsWorld, hole, BodyType.StaticBody, FIXTURE_DEF);
bodyHole.setUserData("Hole"); // ID for hole
this.mScene.attachChild(hole);
this.mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector(hole, bodyHole, false, false));
这是我在 Scene onCreateScene() 中的 ContactListener 以及我尝试过的一些代码。
this.mPhysicsWorld.setContactListener(new ContactListener() {
@Override
public void beginContact(final Contact pContact) {
final Body BodyA = pContact.getFixtureA().getBody();
final Body BodyB = pContact.getFixtureB().getBody();
if(BodyA.getUserData() == "Ball" && BodyB.getUserData() == "Hole"){
ball.setPosition(hole);
// BodyA.setType(BodyType.StaticBody); // bodyBall
//mPhysicsWorld.destroyBody(BodyB); // bodyHole
}else if(BodyA.getUserData() == "Hole" && BodyB.getUserData() == "Ball"){
ball.setPosition(hole);
// BodyB.setType(BodyType.StaticBody); // bodyBall
// hole.dispose(); // bodyHole
}
}
谁能解释一下如何将球换成球或其他方式来模拟球落入球内。 谢谢
【问题讨论】:
标签: android box2d andengine collision-detection