Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在javascript中将父类强制转换为子类_Javascript_Casting_Box2d_Box2dweb - Fatal编程技术网

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

如何在javascript中将父类强制转换为子类,javascript,casting,box2d,box2dweb,Javascript,Casting,Box2d,Box2dweb,我正在使用,我正在尝试制作一个函数,它将添加如何根据“身体”形状绘制“身体”的说明 也就是说:当收到“b2BodyDef”时,获取形状,并使用外部信息获取形状规格。为此,我需要将“b2Shape”转换回“b2CircleShape” 我想用C++可以像 b2CircleShape* shape_circle = dynamic_cast< (b2CircleShape*) >( shape ); 早些时候我有: // Create player var player

我正在使用,我正在尝试制作一个函数,它将添加如何根据“身体”形状绘制“身体”的说明

也就是说:当收到“b2BodyDef”时,获取形状,并使用外部信息获取形状规格。为此,我需要将“b2Shape”转换回“b2CircleShape”

我想用C++可以像

 b2CircleShape* shape_circle = dynamic_cast< (b2CircleShape*) >( shape );
早些时候我有:

   // 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是如何做到这一点的,因为debug draw显示的功能与您在这里所做的几乎完全相同。在box2dweb源代码中搜索
b2World.prototype.DrawShape


如果让你感觉更好,在原来的C++ B2CyCulsHePe中,成员变量是公共的,所以没有GeGrimeS,并且“内部”直接访问:它没有严格的类型,我怀疑您是否需要投射对象。什么是

shape
事实上,你能
console.log
它吗?谢谢@Bergi的快速回复,console.log显示:[16:20:26.637]({m_p:{x:0,y:0},m_type:0,m_radius:0.2})有没有办法调用函数GetRadius——我宁愿避免触及该类的“内部结构”。对于其他使用google的人来说,DrawShape是:`case b2Shape.e_circleShape:{var circle=((b2CircleShape的形状实例?shape:null));var center=b2Math.MulX(xf,circle.m_p);var radius=circle.m_radius;var axis=xf.R.col1;this.m_debugDraw.DrawSolidCircle(中心,半径,轴,颜色)}中断`
   // 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 );