微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

runtime-error – 使用b2FixtureDef的box2d CreateFixture提供纯虚函数调用

我有这个代码,在行中给我运行时错误

body->CreateFixture(&BoxDef)

我在windows中使用cocos2d-x 2.1.5和Box2d 2.2.1

CCSprite *sprite = CCSprite::create(imageName.c_str());
    this->addChild(sprite,1);

    b2BodyDef bodyDef;
    bodyDef.type = isstatic?b2_staticBody:b2_dynamicBody;
    bodyDef.position.Set((position.x+sprite->getContentSize().width/2.0f)/PTM_RATIO,(position.y+sprite->getContentSize().height/2.0f)/PTM_RATIO);
    bodyDef.angle = CC_degrees_TO_radians(rotation);
    bodyDef.userData = sprite;
    b2Body *body = world->CreateBody(&bodyDef);

    b2FixtureDef BoxDef;
    if (isCircle)
    {
        b2CircleShape circle;
        circle.m_radius = sprite->getContentSize().width/2.0f/PTM_RATIO;
        BoxDef.shape = &circle;
    }
    else
    {
        b2polygonShape Box;
        Box.SetAsBox(sprite->getContentSize().width/2.0f/PTM_RATIO,sprite->getContentSize().height/2.0f/PTM_RATIO);
        BoxDef.shape = &Box;
    }

    if (isEnemy)
    {
        BoxDef.userData = (void*)1;
        enemies->insert(body);

    }

    BoxDef.density = 0.5f;
    body->CreateFixture(&BoxDef)  //<-- HERE IS THE RUN TIME ERROR

;

当我调试Box2d代码即时到达b2Fixture.cpp
方法中:

void b2Fixture::Create(b2BlockAllocator* allocator,b2Body* body,const b2FixtureDef* def)

在线:

m_shape = def->shape->Clone(allocator);

得到运行时错误

R6025 pure virtual function call

解决方法

棘手的一个.我自己碰到了几次.它与变量范围有关.

BoxDef.shape是问题所在.您可以在if / else块中将形状创建为局部变量,然后将它们分配给BoxDef.一旦执行离开if / else块作用域,那么这些局部变量将是垃圾. BoxDef.shape现在指向释放的内存.

解决方案是通过在if / else块之前移动圆形和框形状声明来保持形状变量的范围.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐