设置不同体型之间的碰撞

Shi*_*din 2 android box2d andengine

我创建了一个可以连续移动的Kinematic Body类型平面精灵.所以,我设定了一个线性速度到身体,这就是它连续移动的原因.但我有屏幕边界屋顶,地面,左墙,右墙.所有这些都是静态的.当平面移动时,它不会与任何边界墙碰撞.之后,在Box-2d手册上学习,我发现一个 运动体永远不会与其他运动身体静体碰撞.因此,无论是将墙壁设置为运动还是静态,它仍然不会与飞机发生碰撞.当我将墙壁设置为动态时,它会因重力而下降.那么,我该如何设置我的飞机和墙壁之间的碰撞?

这是代码:

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

    }
Run Code Online (Sandbox Code Playgroud)

Pav*_*vel 5

我看到两种方式:

  1. 使用动态的身体而不是运动.要移动物体,您可以将gravityScale设置为零并通过设置速度移动,或使用b2MotorJoint,b2MouseJoint或其他.
  2. 如果你真的需要运动体,并且你想要接触地面(例如通过设置接触式听众),那么你应该通过b2WeldJoint将另一个动态体附加到这个运动体上.然后,您可以聆听这个动态身体的接触,并根据您的意愿做出反应.

  • 我也同意第一个建议.为此必须使用动态体. (2认同)