[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(); } } });