[AndEngine]Physics Box2D Extensionを使った画面で、物体同士の衝突力を算出する

AndEngineの拡張で、「Physics Box2D Extension」というのがあるが、この拡張を使うと

物理演算された動きを簡単に再現できる。

で、再現ついでに、色々遊んでいたのだが

物体同士が衝突したら、アクションを起こしたい場合、

たとえば、衝突した物体が壊れるとか

音を鳴らすとか。

そんな場合、単純に衝突した時にアクションを起こすと、ほんの少し触れただけでも

衝突アクションが発生しまくってしまう。

ある程度強い強さで衝突した場合のみ、アクションを発生させたい場合

物体同士の衝突力を算出して制御する必要がある。

おおよその簡単な制御だと以下のようになる

this.mPhysicsWorld.setContactListener(new ContactListener() {
  @Override
  public void endContact(Contact contact) {
  }

  @Override
  public void beginContact(Contact contact) {
    Vector2 contactPos    = contact.GetWorldManifold().getPoints()[0];
    Vector2 contactNormal = contact.GetWorldManifold().getNormal();

    Vector2 va = contact.getFixtureA().getBody().getLinearVelocityFromWorldPoint(contactPos);
    va.sub(contact.getFixtureB().getBody().getLinearVelocityFromWorldPoint(contactPos));

    float iForce = va.len();

    if(iForce >= 10.0f) {
      explosionSound.play();
    }
  }
});

Android

Posted by GENDOSU