-1

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

   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);
        }
    }
 };
4

2 回答 2

2

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

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

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

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

于 2012-04-24T19:16:18.953 回答
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]);
于 2014-02-18T11:57:03.487 回答