Android AndEngineの2つの円の衝突が完全に。私は持っています two circle
と collision method
彼らのために、私は彼らが欲しいとき それぞれに触れる その他 collision
起こる、 現在 それらが互いに近づくと衝突が発生します。
私はそれが原因だと思う transparent free space
各円の.pngファイル内。
写真では、彼らが遠くから衝突していることがわかります。両方がお互いに触れたときに欲しいです。
私の衝突方法:
if (circle1.collidesWith(circle)){
Score += 1;
}
回答:
回答№1は1pngの透明な場所がそれを引き起こすことは、あなたが正しいとほぼ確信しています。あなたはおそらくBoxBodyを作成しています。あなたの場合、次のような円の本体を使用する必要があります。
Body circleBody = PhysicsFactory.createCircleBody(pWorld, pSprite, BodyType.StaticBody, FixtureDef);
役に立たない場合は、ボディの位置とサイズを指定できるオーバーロードメソッドがあります。シーンにアタッチするだけでよいDebugRenderを使用することをお勧めします。
new DebugRenderer(physicsWorld, vbom)
これを使用すると、次のように役立つことがわかります。
PS。あなたは私たちに多くの情報を提供しませんでしたが、contactListenerを使用してコリジョンをチェックする必要があります。
PS2。 Box2D拡張機能を使用しない場合は、実行してください。 これはAndEngineの優れた機能であり、それを自分で実装するのは無意味です。Box2Dなしで2つのオブジェクトの円形状の衝突を検出することは困難です。
回答№2の場合は1
Box2dにいない場合は、使用する必要があります Pixel-Perfect Collisionライブラリ。まあデフォルトのAndEngineライブラリ、ピクセル完璧な衝突をサポートしていません。このサポートを取得するには、Eclipseでこのライブラリをインポートし、プロジェクト使用ライブラリに追加する必要があります。
ここでは、このライブラリの使用方法を示します。スプライトのテクスチャとアトラスを定義するとき、次のように記述します。
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ライブラリを使用するには、いくつかの調整が必要です。従う この 行くスレッド。