我正在用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);
}
}
};
答案 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]);