簡體   English   中英

如何在JavaScript中將父類轉換為子類

[英]How to cast parent class to child class in javascript

我正在使用box2dweb ,正在嘗試創建一個函數,該函數將添加有關如何基於“身體”形狀繪制“身體”的說明。

也就是說:收到“ b2BodyDef”后,將獲得形狀,並通過外部信息獲得形狀規格。 為此,我需要將“ b2Shape”轉換回“ b2CircleShape”。

我想用C ++就像

 b2CircleShape* shape_circle = dynamic_cast< (b2CircleShape*) >( shape );

我如何使用javascript做類似的事情? 我確實知道還有很多其他方法可以做到這一點(例如,在此示例中將所需的半徑作為參數傳遞),但是我想做我認為正確的事情,而不是hack。

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 );

正如Bergi所說,Javascript沒有類,因此私有/受保護成員的概念實際上並不存在。 我建議您看看box2dweb如何做到這一點,因為調試繪圖顯示幾乎可以完成您在此處所做的相同操作。 搜索b2World.prototype.DrawShape在box2dweb源。

如果讓您感覺更好,則在原始的C ++ b2CircleShape中,成員變量是公共的,因此沒有GetRadius且可以直接訪問'internals':)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM