0

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

1 に答える 1

0

Bergi が言うように、Javascript にはクラスがないため、プライベート/保護されたメンバーの概念は実際には存在しません。デバッグ描画表示は、ここで行っていることとほぼ同じことを行うため、box2dweb がこれを行う方法を確認することをお勧めします。b2World.prototype.DrawShapebox2dweb ソースで検索します。

気分が良くなる場合は、元の C++ b2CircleShape ではメンバー変数がパブリックであるため、GetRadius がなく、「内部」に直接アクセスします:)

于 2013-01-21T01:00:56.127 に答える