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