C ++ Bad Thread Access - PullRequest
0 голосов
/ 01 мая 2020

У меня есть проект, в котором у меня есть несколько сцен, каждая из которых представляет состояние, например экран spla sh, главное меню, уровень и т. Д. c. Существует основной класс Game и SceneManager, который обрабатывает все сцены. Мне нужно вызвать некоторые функции SceneManager из отдельных классов Scene, поэтому я попытался реализовать передачу SceneManager в классы Scene через указатель. Тем не менее, я продолжаю получать следующую ошибку:

Thread 1: EXC_BAD_ACCESS (code=1, address=0x0)

Я предполагаю, что я что-то не инициализировал правильно и что я вызываю ошибку, но мне трудно найти точную проблему и понять ее. Я включил соответствующий код ниже:

SceneManager. cpp функция, которая выдает ошибку:

void SceneManager::SetCurrentScene(Scene* scene) {

    currentScene = scene;

}

Game. cpp

Game::GameState Game::GAME_STATE = Playing;
sf::RenderWindow Game::mainWindow;
SceneManager* Game::sceneManager;

void Game::Start(void) {

    mainWindow.create(sf::VideoMode(GAME_SCREEN_WIDTH, GAME_SCREEN_HEIGHT,32), GAME_WINDOW_TITLE, sf::Style::Close);

    //make a clock
    sf::Clock deltaClock;

    //load the screen manager
    //screenManager = new ScreenManager();
    sceneManager->SetCurrentScene(new SplashScene(sceneManager)); // <---- This line is the first use of SetCurrentScene()



    while(mainWindow.isOpen()) {

        //get the delta time
        sf::Time deltaTime = deltaClock.restart();
        float delta = deltaTime.asMilliseconds();

        GameLoop(delta);
    }

    mainWindow.close();
}

/*
bool Game::IsExiting()
{
    if(gameState == Game::Exiting)
        return true;
    else
        return false;
}
*/

sf::RenderWindow& Game::GetWindow()
{
    return mainWindow;
}


void Game::GameLoop(float delta) {

    sf::Event currentEvent;
    mainWindow.pollEvent(currentEvent);

    // "close requested" event: we close the window
    if (currentEvent.type == sf::Event::Closed) {
        mainWindow.close();
    }

    //graphics and rendering
    mainWindow.clear(GAME_WINDOW_BUFFER_COLOR);

    //update the current screen
    sceneManager->currentScene->Update(currentEvent, delta);
    sceneManager->currentScene->Draw(mainWindow);

    //display the window
    mainWindow.display();

}

Scene. cpp

Scene::Scene() {

    Load();

}


Scene::Scene(SceneManager* sceneManager) {

    this->sceneManager = sceneManager;
    Load();

}


Scene::~Scene() {

}

void Scene::Load() {

}

void Scene::Draw(sf::RenderWindow& renderWindow) {

}

void Scene::Update(sf::Event event, float delta) {

}

Спасибо за помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...