android andengine中的精灵碰撞

时间:2012-04-24 19:01:23

标签: android collision-detection sprite andengine collision

我正在用andengine开发一个简单的游戏。 我有10个球在屏幕上随机移动。我把球作为精灵中的图片导入。如果它们在相同的坐标上移动,它们会通过自己的内部。但我想要:如果它们在相同的coodirnates移动,他们应该改变他们的方向。所以他们不能通过他们的内心。我可以这样做吗?

   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 个答案:

答案 0 :(得分:2)

每个对象(球)需要一个边界框,或者在你的情况下是一个边界圆,它等于你的精灵的大小。

当游戏更新并且任何球位置发生变化时,您必须测试碰撞。

圆形到圆形碰撞测试是最简单的类型。 如果(ball1.pos + ball2.pos)之间的距离小于(ball1.radius + ball2.radius)= collision。

然后通过反转速度或计算新的动量或其他东西来处理碰撞。 (您还需要将对象移开,以便它们不再发生碰撞)

答案 1 :(得分: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]);