【问题标题】:Android AndEngine two circles collision perfectlyAndroid AndEngine 两圈完美碰撞
【发布时间】:2014-03-11 18:58:10
【问题描述】:

Android AndEngine 两圈完美碰撞。我有two circlecollision method 给他们,我希望当他们相互接触collision 发生,当前 当他们彼此靠近时发生碰撞。

我认为是因为每个圆圈的.png文件中的transparent free space

在图片中你可以看到现在它们从远处碰撞,我想当它们相互接触时。

我的碰撞方式:

                            if (circle1.collidesWith(circle)){
                                Score += 1;
                            }

【问题讨论】:

    标签: android andengine collision-detection


    【解决方案1】:

    我几乎可以肯定你是对的,png 中的透明位置会导致它。您可能正在创建 BoxBody。在您的情况下,您应该像这样使用圆形:

    Body circleBody = PhysicsFactory.createCircleBody(pWorld, pSprite, BodyType.StaticBody, FixtureDef);
    

    如果它没有帮助,则有方法重载,您可以在其中提供主体的位置和大小。我可以推荐您使用只需附加到场景的 DebugRender:

    new DebugRenderer(physicsWorld, vbom)
    

    当您使用它时,您会发现它有多么有用:) 请记住,当您在现场有很多尸体时,它可能会降低您的手机速度。

    PS。你没有给我们很多信息,但你应该使用contactListener来检查colisions。网上有很多教程

    PS2。如果你不使用 Box2D 扩展 - 那就去做吧。这是 AndEngine 的一个很棒的特性,你自己去实现它是没有意义的。如果没有 Box2D,将很难检测 2 个对象的圆形碰撞。

    【讨论】:

      【解决方案2】:

      如果你不在 Box2d 中,你必须使用Pixel-Perfect Collision library。好默认的AndEngine库,不支持像素完美碰撞。要获得此支持,您需要在 eclipse 中导入此库并将其添加到您的项目使用库中。

      在这里,我演示如何使用这个库。当你为你的精灵定义 Texture 和 Atlas 时,如下所示。

       private BitmapTextureAtlas lifeAtlas;
       public PixelPerfectTiledTextureRegion life_Texture;
      
      PixelPerfectTextureRegionFactory.setAssetBasePath("gfx/game/");
      
      lifeAtlas = new BitmapTextureAtlas(textureManager, 1280, 128,
                          TextureOptions.BILINEAR);
      
       life_Texture = PixelPerfectTextureRegionFactory.createTiledFromAsset(
                          lifeAtlas, activity, "heart_tiled.png", 0, 0, 10, 1, 0);
      
          lifeAtlas.load();
      

      对于您的自定义精灵类,

      public class Plane extends PixelPerfectAnimatedSprite {
      
      public Plane(float pX, float pY,
              PixelPerfectTiledTextureRegion pTiledTextureRegion,
              VertexBufferObjectManager pVertexBufferObjectManager) {
      
          super(pX, pY, pTiledTextureRegion, pVertexBufferObjectManager);
          setColor(Color.GREEN);
      }
      

      }

      您还需要对 AndEngine 库进行一些调整才能使用它。关注this 话题即可。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多