Android AndEngine两个圈完全碰撞。我有two circle
和collision method
,我希望当他们触摸其他其他collision
时,当前当他们靠近时碰撞发生了。
我认为这是因为每个圈子的.png文件中的transparent free space
。
在图片中你可以看到,现在它们从一定距离发生碰撞,我希望它们互相碰触。
我的碰撞方法:
if (circle1.collidesWith(circle)){
Score += 1;
}
答案 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主题进行操作。