SDL2测试仅在我没有调试时启动

时间:2014-04-01 00:43:24

标签: c++ sdl sdl-2

我正在尝试从lazyfoo.net学习SDL2并且我有很多问题(我从1月开始学习c ++,所以我确实知道发生了什么,但不是全部),第一个也是最明显的一个是“Hello world”只在我没有调试时启动,如果我进行调试,它会给我“程序无法启动,因为你的计算机缺少SDL2.dll”。这根本不是真的。我将.dll文件放入我当前项目的文件夹(我称之为TEST),该网站告诉我将它放在与.vxcproj文件相同的区域,这就是我所做的...

教程还告诉我输入#include <SDL.h>,当我这样做时说很多东西都是未定义的(我只是直接从教程页面底部的zip文件复制并粘贴),所以我必须使用#include <SDL2/SDL.h>

和第三个(我设法修复,sorta)是将图像放到屏幕上,它显示它找不到.bmp文件,所以我不得不把文件放到源文件部分视觉工作室。它适用于此测试,但如果我开始合并多个.bmp文件,它可能会变得混乱。我应该这样做吗?

这是我的代码,几乎与zip文件中的代码相同

#include <SDL2/SDL.h> //first modification i did
#include <stdio.h>

const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;

bool init();
bool loadMedia();
void close();

SDL_Window* gWindow = NULL;
SDL_Surface* gScreenSurface = NULL;
SDL_Surface* gHelloWorld = NULL;

bool init()
{
    bool success = true;

    if (SDL_Init(SDL_INIT_VIDEO) < 0)
    {
        printf("SDL could not initialize! SDL_Error: %s\n", SDL_GetError());
        success = false;
    }
    else
    {
        gWindow = SDL_CreateWindow("SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
        if (gWindow == NULL)
        {
            printf("Window could not be created! SDL_Error: %s\n", SDL_GetError());
            success = false;
        }
        else
        {
            gScreenSurface = SDL_GetWindowSurface(gWindow);
        }
    }
    return success;
}

bool loadMedia()
{
    bool success = true;

    gHelloWorld = SDL_LoadBMP("hello_world.bmp"); //second modification
    if (gHelloWorld == NULL)
    {
        printf("Unable to load image %s! SDL Error: %s\n", "hello_world.bmp", SDL_GetError());
        success = false;
    }
    return success;
}
void close()
{
    SDL_FreeSurface(gHelloWorld);
    gHelloWorld = NULL;

    SDL_DestroyWindow(gWindow);
    gWindow = NULL;

    SDL_Quit();
}
int main(int argc, char* args[])
{
    if (!init())
    {
        printf("Failed to initialize!\n");
    }
    else
    {
        if (!loadMedia())
        {
            printf("Failed to load media!\n");
        }
        else
        {

            SDL_BlitSurface(gHelloWorld, NULL, gScreenSurface, NULL);
            SDL_UpdateWindowSurface(gWindow);
            SDL_Delay(2000);
        }
    }
    close();

    return 0;
}

2 个答案:

答案 0 :(得分:0)

@Skalli他明确表示Visual Studio意味着他正在运行Windows,

请在合并图像时将它们放在与使用“释放”模式时构建的exe相同的目录中。查看SDL库文件,转到bin并复制SDL2.dll并将其放在EXE所在的位置。也是为了能够从IDE运行程序,转到Program Files x86文件夹并转到IDE文件夹,应该被称为“Microsoft Visual Studio XX”并转到bin并粘贴SDL2.dll

如果问题仍然存在,请回答我的回答

答案 1 :(得分:0)

HMMM 你的问题:

1

我也很烦,最好使用#including,如果你将这些东西放到头文件中,比如stdafx或类的标题会更好,这样会更好,这是一个很大的机会你搞砸了整合你的目录+你的.dll并不是一个好地方。

2

你应该把所有的dll放到主项目的文件夹的调试中,你看到exe,.pdb和.ilk的区域。

3

您使用了“hello_world.bmp”,没有任何问题,它是您的文件的位置,如果您要运行调试然后将文件(.bmp)放在里面......让我们假设您创建了一个名为的项目ABC,并将其放在一个名为ABC的文件夹中,将有3个名为DEBUG的文件夹(如果你至少运行了一次调试),ipch和ABC。

你应该将文件放在包含.vcxproj和其他内容的ABC文件夹中,然后如果你想使用主文件夹的调试文件夹中的.exe文件运行你的游戏那么你应该复制您使用的所有文件(在这种情况下,您使用.bmp)并将它们粘贴到该文件夹​​,包含.exe的文件夹,如果您运行调试,它将在ABC文件夹中读取,如果您亲自去到.exe文件,它会读取它的文件夹中的文件。