Android AndEngine两个圈完美碰撞

时间:2014-03-11 18:58:10

标签: android andengine collision-detection

Android AndEngine两个圈完全碰撞。我有two circlecollision method,我希望当他们触摸其他其他collision时,当前当他们靠近时碰撞发生了。

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

enter image description here

在图片中你可以看到,现在它们从一定距离发生碰撞,我希望它们互相碰触。

我的碰撞方法:

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

2 个答案:

答案 0 :(得分:1)

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

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

如果它没有帮助,那么方法过载可以提供身体的位置和大小。我建议你使用DebugRender,你只需要附加到场景:

new DebugRenderer(physicsWorld, vbom)

当你使用它时,你会发现它有多么有用:)请记住,当你在场景中有很多尸体时它可能会减慢你的手机速度。

PS。您没有向我们提供大量信息,但您应该使用contactListener来检查分数。互联网上有很多教程

PS2。如果您不使用Box2D扩展程序 - 请执行此操作。这是AndEngine的一大特色,为自己实现这一点毫无意义。没有Box2D,很难检测到2个物体的圆形碰撞。

答案 1 :(得分:1)

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

在这里,我将演示如何使用此库。为sprite编写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主题进行操作。