我有一个游戏,与陀螺仪,我控制几块。现在问题是我已经在我的andengine代码中使用了box2d,但是这些物体似乎并没有对另一个做出反应,导致它们重叠,而不是真正做物理的东西。我需要碰撞,使一个对象坐在另一个AndEngine
在我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;
}
现在,我创建了现场,我创建了物理世界。 然后我创建我的第一个“玩家”,(这是一个精灵,我移动)。我为它创建了一个body,并且在我的Player.class(entity)中设置了这个body。从其实体访问每个玩家身体。然后在每一次更新中(代码稍微长一点,但是我拿出了与物理学没有关系的东西),我创建了一个新玩家。然后对于我的数组列表中的每个玩家(玩家),我在加速度计之后设置线速度,以使其移动。问题是,如果一个玩家击中另一个玩家,它们会重叠,并且不会对此产生反应。
玩家夹具到处都是一样的player_fix = PhysicsFactory.createFixtureDef(10.0f, 0.2f, 1.0f);
BodyType总是DynamicBody。有人能告诉我我缺少什么吗?
为什么你检查碰撞?碰撞时会发生什么特别的事情。 box2dphysichsenxtension应该能够让你创建一些盒子,这些盒子在碰撞时会停下来,而不需要手动代码来检查它。 – CodeTower 2013-03-23 20:37:57
寻找答案,我听到很多关于box2dphysichs,但我如何将它整合到我的程序中? – 2013-03-25 07:32:13
你为每个玩家使用相同的身体。这意味着所有玩家都会连接到同一个身体。 你的代码有点混乱。你创造了多个球员吗? 在updateHandler中,你再次添加了玩家集合中的所有玩家,我不确定那是你想要的。一个实体除非被移除,否则应该只添加一次到场景和物理世界。 – CodeTower 2013-03-25 10:33:12