【发布时间】:2013-07-17 10:34:10
【问题描述】:
我创建了一个Kinematic体型平面精灵,它将连续移动。所以,我为身体设置了一个线速度,这就是它不断移动的原因。但是我有屏幕边界屋顶,地面,左墙,右墙。所有这些都是静态的。当飞机移动时,它不会与任何边界墙发生碰撞。之后,研究Box-2d手册,我发现Kinematic Body永远不会与其他Kinematic Body和Static Body发生碰撞>。因此,无论我将墙设置为运动学还是静态体,它都不会与平面发生碰撞。当我将墙设置为 Dynamic 时,它会因重力而倒下。那么,我应该怎么做才能设置我的飞机和墙壁之间的碰撞呢?
代码如下:
private void initializePlaneAndBoundary() {
/*
* create wall boundary
*/
final Rectangle ground = new Rectangle(0, camera_Height - 2,
camera_Width, 2, vbom);
final Rectangle roof = new Rectangle(0, 0, camera_Width, 2, vbom);
final Rectangle left = new Rectangle(0, 0, 2, camera_Height, vbom);
final Rectangle right = new Rectangle(camera_Width - 2, 0, 2,
camera_Height, vbom);
final FixtureDef wallFixtureDef = PhysicsFactory.createFixtureDef(0,
0.5f, 0.5f);
PhysicsFactory.createBoxBody(this.mPhysicsWorld, ground,
BodyType.StaticBody, wallFixtureDef);
PhysicsFactory.createBoxBody(this.mPhysicsWorld, roof,
BodyType.StaticBody, wallFixtureDef);
PhysicsFactory.createBoxBody(this.mPhysicsWorld, left,
BodyType.StaticBody, wallFixtureDef);
PhysicsFactory.createBoxBody(this.mPhysicsWorld, right,
BodyType.StaticBody, wallFixtureDef);
attachChild(ground);
attachChild(roof);
attachChild(left);
attachChild(right);
aPilot = new Pilot(222, 333, pilotTexures, vbom) {
@Override
protected void onManagedUpdate(float pSecondsElapsed) {
super.onManagedUpdate(pSecondsElapsed);
}
};
pilotBody = PhysicsFactory.createBoxBody(this.mPhysicsWorld, aPilot,
BodyType.KinematicBody, FIXTURE_DEF);
this.mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector(
aPilot, pilotBody, true, true));
pilotBody.setLinearVelocity(DEMO_VELOCITY_X, DEMO_VELOCITY_Y);
attachChild(aPilot);
}
【问题讨论】: