Frage

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?

War es hilfreich?

Lösung

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

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top