我正在尝试从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;
}
答案 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 你的问题:
我也很烦,最好使用#including,如果你将这些东西放到头文件中,比如stdafx或类的标题会更好,这样会更好,这是一个很大的机会你搞砸了整合你的目录+你的.dll并不是一个好地方。
你应该把所有的dll放到主项目的文件夹的调试中,你看到exe,.pdb和.ilk的区域。
您使用了“hello_world.bmp”,没有任何问题,它是您的文件的位置,如果您要运行调试然后将文件(.bmp)放在里面......让我们假设您创建了一个名为的项目ABC,并将其放在一个名为ABC的文件夹中,将有3个名为DEBUG的文件夹(如果你至少运行了一次调试),ipch和ABC。
你应该将文件放在包含.vcxproj和其他内容的ABC文件夹中,然后如果你想使用主文件夹的调试文件夹中的.exe文件运行你的游戏那么你应该复制您使用的所有文件(在这种情况下,您使用.bmp)并将它们粘贴到该文件夹,包含.exe的文件夹,如果您运行调试,它将在ABC文件夹中读取,如果您亲自去到.exe文件,它会读取它的文件夹中的文件。