多个球之间的碰撞andegine android

时间:2012-11-20 20:40:09

标签: android andengine

我在Android上使用andengine,我有多个球在它们和屏幕的极限之间反弹。问题是碰撞后我做的是反转X和Y的方向,这样弹跳效果不是真的,你怎么办?

@Override
protected void onManagedUpdate(final float pSecondsElapsed) {
    if(this.mX < 0) {
        this.mPhysicsHandler.setVelocityX(DEMO_VELOCITY);
    } else if(this.mX + this.getWidth() > CAMERA_WIDTH) {
        this.mPhysicsHandler.setVelocityX(-DEMO_VELOCITY);
    }

    if(this.mY < 0) {
        this.mPhysicsHandler.setVelocityY(DEMO_VELOCITY);
    } else if(this.mY + this.getHeight() > CAMERA_HEIGHT) {
        this.mPhysicsHandler.setVelocityY(-DEMO_VELOCITY);
    }

    for (int i = 0; i < Bolas.size(); i++) {
        if (this.collidesWith(Bolas.get(i)) && Bolas.get(i).equals(this) == false) {                               
            // ????????????????????????????????                      
            this.mPhysicsHandler.setVelocityY((-1) * this.mPhysicsHandler.getVelocityY());
            this.mPhysicsHandler.setVelocityX((-1) * this.mPhysicsHandler.getVelocityX());                   
        }
    }                 

    super.onManagedUpdate(pSecondsElapsed);
}

谢谢。

2 个答案:

答案 0 :(得分:1)

如果我理解正确,那么你可以使用Body(box2d)作为精灵:

Sprite yourSprite = new Sprite(pX, pY, this.mYourSpriteTextureRegion);
Body yourSpriteBody = PhysicsFactory.createCircleBody(this.mPhysicsWorld, yourSprite , BodyType.DynamicBody, FIXTURE_DEF);
this.mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector(yourSprite , yourSpriteBody , true, true));

弹跳将是自动的。

查看此example

答案 1 :(得分:0)

您应该使用AndEnginePhysicsBoxExtension。您将能够设置密度,弹性,摩擦力等,并拥有自己的碰撞处理程序。我喜欢以下示例:https://github.com/nicolasgramlich/AndEngineExamples/blob/GLES2/src/org/andengine/examples/BasePhysicsJointExample.java

我还建议您阅读有关BodyCollisionHandler的信息。