0

我正在使用 SDL 用 C++ 编写一个简单的游戏。我之前写过一个更复杂的游戏,但它在一个包含 4000 多行代码的源文件中。

我的问题是变量似乎在定义它们的 .cpp 文件的末尾被重置。

在 Declarations.cpp 中(除其他外)

bool CheckFiles()
{
    SDL_Surface *Background = LoadImage("Resources/Images/Background.png");
    SDL_Surface *Character1 = LoadImage("Resources/Images/Character.png");
    SDL_Surface *MenuBackground = LoadImage("Resources/Images/MenuBackground.png");
    TTF_Font *EightBitLimit = TTF_OpenFont("Resources/Fonts/EightBitLimit.ttf",16);
    TTF_Font *KarmaFuture = TTF_OpenFont("Resources/Fonts/KarmaFuture.ttf",16);
    TTF_Font *EightBitLimitSmall = TTF_OpenFont("Resources/Fonts/EightBitLimit.ttf",9);
    SDL_Surface *Message1 = NULL;
    SDL_Surface *Message2 = NULL;

    if (Background == NULL) return false;
    if (Character1 == NULL) return false;
    if (MenuBackground == NULL) return false;
    if (EightBitLimit == NULL) return false;
    if (KarmaFuture == NULL) return false;
    if (EightBitLimitSmall == NULL) return false; //Breakpoint here, everything has loaded fine
    return true;
}

在菜单.cpp

#include"Declarations.h"
#include"Menu.h"

void Menu()
{
    while (Quit == false && State == MENU)
    {
        CheckFiles();
        ApplySurface(0,0,MenuBackground,Screen); //Gives an access violation as all surfaces and fonts have became NULL
        Message1 = TTF_RenderText_Solid(KarmaFuture,"Tripping Octo Dangerzone",White);

我的头文件得到妥善保护。变量和函数声明如下:

extern TTF_Font *KarmaFuture;
extern bool CheckFiles();

我的 main.cpp 文件:

#include"Declarations.h"
#include"Menu.h"
#include"Game.h"

int main (int argc, char* argv [])
{
    if (Init() == false) return -1;
    if (CheckFiles() == false) return -1; //Everything is initialized and loaded properly
    while (Quit == false)
    {
        switch(State)
            {
    case MENU:
        Menu();
        break;
    case GAME:
        Game();
        break;
    }
}
return 0;

}

这是我第一次使用头文件,如果我的错误非常明显,请见谅。感谢您提前提供任何帮助。

4

1 回答 1

2

您没有检查相同的变量。

SDL_Surface *MenuBackground = LoadImage("Resources/Images/MenuBackground.png");

line inCheckFiles()声明了一个名为MenuBackground. 此变量与程序中任何其他位置的任何其他同名变量无关(该行所在的范围和任何子范围除外)。

于 2013-07-05T11:00:47.070 回答