0

私は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);
}

ありがとうございました。

4

2 に答える 2

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));

バウンスは自動的に行われます。

この例を見てください

于 2012-11-21T12:44:19.513 に答える
0

AndEnginePhysicsBoxExtension を使用する必要があります。密度、弾性、摩擦などを設定し、独自の衝突ハンドラを持つことができます。次の例が気に入っています: https://github.com/nicolasgramlich/AndEngineExamples/blob/GLES2/src/org/andengine/examples/BasePhysicsJointExample.java

また、BodyCollisionHandler について読むことをお勧めします。

于 2012-11-22T09:05:43.043 に答える