Question

The first level of my game builds and plays correctly, as does my second level when I alter the source file to make it load first instead. However, when I complete the first level and load the second, the game freezes. To be specific, all of the images (characters, background etc) render fine, but they are unable to move, and there is no response from the controls (however, debugging does show that keypresses are still being registered).

The file I think is most likely responsible for the problem is my GameScreenManager.ccp.

#include "GameScreenManager.h"
#include "GameScreenLevel1.h"
#include "GameScreenLevel2.h"
#include "GameScreen.h"

GameScreenManager::GameScreenManager(SDL_Renderer* renderer, SCREENS startScreen)
{
    mRenderer = renderer;
    mCurrentScreen = NULL;

    //Ensure first screen is set up.
    ChangeScreen(startScreen);
}

GameScreenManager::~GameScreenManager()
{
    mRenderer = NULL;
    delete mCurrentScreen;
    mCurrentScreen = NULL;
}

void GameScreenManager::Update(float deltaTime, SDL_Event e)
{
    if(mCurrentScreen != NULL)
    {
        mCurrentScreen->Update(deltaTime, e);
    }

    //Check if Level 1 is completed
    CompleteCheck();
}

void GameScreenManager::Render()
{
    if(mCurrentScreen != NULL)
    {
        mCurrentScreen->Render();
    }
}

void GameScreenManager::ChangeScreen(SCREENS startScreen)
{
    //Clear up the old screen.
    if(mCurrentScreen != NULL)
    {
        delete mCurrentScreen;
    }
    GameScreenLevel1* tempScreen;
    GameScreenLevel2* tempScreen2;
    switch(startScreen)
    {
        case SCREEN_LEVEL1:
            tempScreen = new GameScreenLevel1(mRenderer);
            mCurrentScreen = (GameScreen*)tempScreen;
            tempScreen = NULL;
        break;
        case SCREEN_LEVEL2:
            tempScreen2 = new GameScreenLevel2(mRenderer);
            mCurrentScreen = (GameScreen*)tempScreen2;
            tempScreen2 = NULL;
        break;
    }
}

void GameScreenManager::CompleteCheck()
{
    if(GameScreenLevel1::complete)
    {
        ChangeScreen(SCREEN_LEVEL2);
    }
}

Does anyone think they can spot the issue?

Was it helpful?

Solution

if(GameScreenLevel1::complete)
    {
        ChangeScreen(SCREEN_LEVEL2);
    }

seems to always remain true. you need to set it to false after loading the second level.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top