私はbox2dwebで作業しており、「ボディ」形状に基づいて「ボディ」を描画する方法を追加する関数を作成しようとしています。
つまり、「b2BodyDef」を受け取ったときに形状を取得し、外部情報を使用して形状の仕様を取得します。これを行うには、「b2Shape」を「b2CircleShape」にキャストする必要があります。
C ++では、これは次のようになると思います
b2CircleShape* shape_circle = dynamic_cast< (b2CircleShape*) >( shape );
JavaScriptで同様のことを行うにはどうすればよいですか? これを行うには他にもたくさんの方法があることは知っていますが(この例で必要な半径をパラメーターとして渡すなど)、ハックではなく、自分が正しいと思うことをしたいと思います。
function Add_new_drawable_object_to_world( body, type )
{
GLOBAL_world_objects.push( body );
var s = new Sprite();
if ( type == OBJECT_TYPE_PLAYER )
{
s.graphics.beginFill ( 0x2222ff, 0.6);
var b2CircleShape = Box2D.Collision.Shapes.b2CircleShape;
var fixture_list = body.GetFixtureList();
var shape = fixture_list.GetShape() ;
// FIXME: TypeError: shape.GetRadius is not a function
var radius = shape.GetRadius();
// here i would draw fancy circle with 'radius'
そして以前に私は持っています:
// Create player
var player = new b2FixtureDef(); // ball fixture definition
player.shape = new b2CircleShape();
player.density = 0.5;
player.shape.SetRadius( 0.2 );
var bodyDef = new b2BodyDef();
bodyDef.type = b2Body.b2_dynamicBody;
bodyDef.position.Set( 0.0, 0.0 );
var body = GLOBAL_world.CreateBody(bodyDef);
body.CreateFixture( player );
Add_new_drawable_object_to_world( body, OBJECT_TYPE_PLAYER );