【发布时间】:2013-03-21 15:46:10
【问题描述】:
我有一个游戏,我用陀螺仪控制几个街区。现在的问题是我已经在我的 andengine 代码中实现了 box2d,但身体似乎没有相互反应,导致它们重叠,而不是实际做物理的东西。
在我的 onCreateScene 中有这个:
@Override
protected Scene onCreateScene() {
this.mMainScene = new Scene();
backgroundSprite = new Sprite(0, 0, this.mBackgroundTextureRegion, getVertexBufferObjectManager());
physicsWorld = new PhysicsWorld(new Vector2(0, 0), false);
final Player oPlayer = new Player(centerX, centerY, this.goodTiledTextureRegion, this.getVertexBufferObjectManager(), MainActivity.this, playerID, 0);
player_fix = PhysicsFactory.createFixtureDef(10.0f, 0.2f, 1.0f);
body = PhysicsFactory.createBoxBody(physicsWorld, oPlayer, BodyType.DynamicBody, player_fix);
oPlayer.setBody(body);
playerID++;
players.add(oPlayer);
for (Player player : players) {
player.setPlayers(players);
mMainScene.attachChild(player);
physicsWorld.registerPhysicsConnector(new PhysicsConnector(player, body, true, false));
mMainScene.registerTouchArea(player);
}
this.mMainScene.registerUpdateHandler(physicsWorld);
this.mMainScene.registerUpdateHandler(new TimerHandler(0.1f, true, new ITimerCallback() {
@Override
public void onTimePassed(final TimerHandler pTimerHandler) {
Player player = new Player(random, 5, goodTiledTextureRegion, getVertexBufferObjectManager(), MainActivity.this, playerID, 0);
body = PhysicsFactory.createBoxBody(physicsWorld, player, BodyType.DynamicBody, player_fix);
player.setBody(body);
players.add(player);
mMainScene.detachChildren();
mMainScene.attachChild(backgroundSprite);
for (Player player : players) {
player.setPlayers(players);
mMainScene.attachChild(player);
player.body.setLinearVelocity(AccelerometerHelper.TILTX * 5, AccelerometerHelper.TILTY * 5);
physicsWorld.registerPhysicsConnector(new PhysicsConnector(player, body, true, false));
mMainScene.registerTouchArea(player);
}
}
return this.mMainScene;
}
现在,我创建场景,创建物理世界。 然后我创建了我的第一个“玩家”,(这是我移动的精灵)。我为它创建了一个主体,并将该主体设置在我的 Player.class(实体)中。从它的实体中访问每个玩家的身体。然后每隔几次更新(代码有点长,但我取出了与物理无关的东西)我创建了一个新玩家。然后对于我的数组列表中的每个玩家(玩家),我在加速度计之后设置线速度,以使其移动。问题是,如果一名球员击中另一名球员,他们会重叠,并且不会在撞击时做出反应。
播放器夹具在任何地方都相同player_fix = PhysicsFactory.createFixtureDef(10.0f, 0.2f, 1.0f); 而且 BodyType 始终是 DynamicBody。谁能告诉我我错过了什么?
【问题讨论】:
-
为什么要检查碰撞?当它们碰撞时会发生什么特别的事情。 box2dphysichsenxtension 应该能够让您创建在碰撞时停止的盒子,而无需手动代码来检查。
-
在寻找答案时,我听说过很多关于 box2dphysichs 的信息,但是如何将它集成到我的程序中呢?
-
您对每个玩家使用相同的身体。这意味着所有玩家都连接到同一个身体。由于您的代码有点混乱。你创造了不止一名球员吗?在 updateHandler 中,您再次将所有玩家添加到玩家集合中,我不确定这就是您想要的。一个实体,除非被移除,否则只能在场景和物理世界中添加一次。
-
我在回答中添加了一些修改过的代码。试试看是否有帮助。
-
您可能需要询问我在代码中使用的 MASKBIT。虽然我记得默认行为是身体碰撞。
标签: android andengine physics collision touch-event