我有一個遊戲,與陀螺儀,我控制幾塊。現在問題是我已經在我的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