2017-01-06 5 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

을 몸 여부 이미 파괴되었습니다. 이러한 검사를하면 메모리 문제를 예방할 수 있습니다. 잠재적으로 당신이 설명하는 충돌과 같습니다.