如何在javascript中将父类强制转换为子类

时间:2013-01-20 13:18:30

标签: javascript casting box2d box2dweb

我正在与box2dweb合作,我正在尝试制作一个功能,它会添加如何绘制' body'基于'身体'形状。

那就是:当收到一个' b2BodyDef'获得形状,并与外部信息,获得形状规格。要做到这一点,我需要施放' b2Shape'回到&#c; 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 );

1 个答案:

答案 0 :(得分:0)

正如Bergi所说,Javascript没有类,所以私有/受保护成员的概念并不存在。我建议看看box2dweb是如何做到的,因为调试绘图显示几乎与你在这里做的完全一样。在box2dweb源中搜索b2World.prototype.DrawShape

如果它让你感觉更好,在最初的C ++ b2CircleShape中,成员变量是公共的,所以没有GetRadius和&#39; internals&#39;直接访问:)