2017-01-06 4 views
0

私はBox2D本体を破壊しようとしていますが、破壊しようとするたびに、読み取りアクセス違反エラーのためゲームがクラッシュしています。ボディ/ブロックを作成するためにBox2D本体を破壊する - 読み取りアクセス違反エラー

if (event.mouseButton.button == sf::Mouse::Left) { 
    if (((chunk.getChunkPosition().x + MAX_CHUNK_WIDTH * 16 > block.x * 16) 
     && (block.x * 16 >= chunk.getChunkPosition().x)) 
     && ((chunk.getChunkPosition().y + MAX_CHUNK_HEIGHT * 16 > block.y * 16) 
     && (block.y * 16 >= chunk.getChunkPosition().y))) 
    { 
     chunk.blockPhysic[block.x][block.y]->setCreatedState(false); 
     world.getBWorld()->DestroyBody(chunk.blockPhysic[block.x][block.y]->getBody()); 
    } 
} 

コード:

コードは、本体を削除するには、私は、任意のチェックが表示されない体を削除するには、あなたのコードでは

BlockPhysic::BlockPhysic(b2World* world, const sf::Vector2f& _position, const int& _textureKeyID, const sf::IntRect& _textRect, sf::Vector2f _size, bool _dynamicBody) 
{ 
    b2BodyDef bBodyDef; 
    dynamicBody = _dynamicBody; 
    bBodyDef.type = _dynamicBody == true ? b2_dynamicBody : b2_staticBody; 
    bBodyDef.position.Set(_position.x, _position.y); 
    rBody = world->CreateBody(&bBodyDef); 

    b2PolygonShape bShape; 
    bShape.SetAsBox(_size.x/2, _size.y/2); 
    b2FixtureDef bFixtureDef; 
    bFixtureDef.shape = &bShape; 
    bFixtureDef.density = 0.0f; 
    bFixtureDef.friction = 0.0f; 
    rFixture = rBody->CreateFixture(&bFixtureDef); 

    sf::Texture *texture = &Global::txtManager.textures.at(_textureKeyID); 
    rSprite.setTexture(*texture); 
    rSprite.setOrigin(_size.x/2, _size.y/2); 
    rSprite.setTextureRect(sf::IntRect(_textRect.left, _textRect.top, _textRect.width, _textRect.height)); 
    rSprite.setPosition(_position.x, _position.y); 
    created = true; 
} 

答えて

0

を体かどうかすでに破壊されている。このようなチェックを行うとメモリの問題を防ぐことができます。潜在的にあなたが説明したクラッシュのように。

関連する問題