android - 设置不同体型之间的碰撞

标签 android box2d andengine

我创建了一个运动学 body 类型平面 Sprite ,它将连续移动。因此,我为主体设置了一个线速度,这就是它连续移动的原因。但我有屏幕边界屋顶、地面、左墙、右墙。所有这些都是静态体。当飞机移动时,它不会与任何边界墙碰撞。经过研究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);

    }

最佳答案

我看到两种方法:

  1. 使用动态体而不是运动学。要移动主体,您可以将gravityScale设置为零并通过设置速度来移动,或者使用b2MotorJoint、b2MouseJoint或其他方式。
  2. 如果您确实需要运动体,并且想要捕获与地面的接触(例如通过设置接触监听器),那么您应该通过 b2WeldJoint 将另一个动态体附加到该运动体。然后,您可以监听这个动态体的接触,并根据您的意愿使用react。

关于android - 设置不同体型之间的碰撞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17697457/

相关文章:

Android Flat ActionBar(无阴影)

android - 在 AndEngine Box2d 中动态设置摩擦力

xna - Box2d 可以在 Xbox 上运行吗?

android - AndEngine 导入 GLES2 项目未运行

java - LibGDX设置加速错误

java - 调用 HttpGet 类的 execute() 方法时出现 IO 异常

Android:如何使用选择器?

flutter - 在 Flame Forge2d 中射击子弹

android - 在同一个 Android 应用程序中使用 ARMv7 和 ARM 库

java - andengine gles2中的碰撞检测