2012-04-24 65 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]);