2012-04-24 34 views
-1

我正在通過andengine開發一個簡單的遊戲。 我有10個球在屏幕上隨機移動。我輸入的球像精靈一樣。如果他們在相同的座標上移動,他們會穿過他們自己的內側。但是我想要:如果他們在相同的座標下移動,他們應該改變方向,所以他們不能通過他們的內部,我可以這樣做嗎?android中的雪碧碰撞andengine

private Runnable mStartCircle = new Runnable() { 
     public void run() { 
     int i = circleNumber++; 
     Scene scene = Level1Activity.this.mEngine.getScene(); 
     float startY = -64.0f; 
     float startX = randomNumber.nextFloat()*(CAMERA_WIDTH-70.0f); 
     float a= randomNumber.nextFloat()*(CAMERA_WIDTH-70.0f); 
     circles[i] = new Sprite(startX, startY, textRegCircle[i]); 
     circles[i].registerEntityModifier(
       (IEntityModifier) new SequenceEntityModifier (
          new MoveModifier(10.0f, circles[i].getX(), a, 
            circles[i].getY(),CAMERA_HEIGHT+64.0f))); 
     } 
     scene.getLastChild().attachChild(circles[i]); 
     if (circleNumber < 10){ 
      mHandler.postDelayed(mStartCircle,1000); 
     } 
    } 
}; 

回答

2

每個對象(球)要求的邊界框,或在您的情況下的外接圓,其等於你的子畫面的大小。

當遊戲更新和任何球位置變化時,您必須測試碰撞。

圓到圓碰撞測試是最簡單的類型。 如果(ball1.pos + ball2.pos)之間的距離小於(ball1.radius + ball2.radius)=碰撞。

然後,您通過顛倒速度或計算新的動量或其他東西來處理碰撞。 (您還需要移開對象,使他們不再發生碰撞)

+0

已更新的codes.can你告訴我如何在代碼? – Kadir 2012-04-24 19:26:15

0

就申請球之間的物理連接器:

所以它會發生碰撞和反彈。

final FixtureDef boxFixtureDef = PhysicsFactory.createFixtureDef(0.1f, 0.5f, 0.5f); 
final Body ballBody = PhysicsFactory.createBoxBody(this.mPhysicsWorld, circles[i],BodyType.DynamicBody, boxFixtureDef); 
this.mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector(circles[i], ballBody, true, true)); 
this.mScene.attachChild(circles[i]);