У меня есть проект, в котором у меня есть несколько сцен, каждая из которых представляет состояние, например экран 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) {
}
Спасибо за помощь!