【发布时间】:2014-05-11 04:52:14
【问题描述】:
我正在尝试从lazyfoo.net 学习 SDL2,但我遇到了很多问题(我从一月份开始也一直在学习 c++,所以我知道发生了什么,但不是全部),第一个最明显的一个是“Hello world”仅在我没有调试的情况下开始出现,如果我进行调试,它会给我“程序无法启动,因为您的计算机中缺少 SDL2.dll”。这根本不是真的。我将 .dll 文件放入我当前项目的文件夹(我称之为 TEST),该站点只是告诉我将它放在与 .vxcproj 文件相同的区域中,这就是我所做的......
教程还告诉我输入#include <SDL.h>,当我这样做时,它说很多东西是未定义的(我只是直接从教程页面底部的 zip 文件中复制并粘贴了它),所以我必须使用#include <SDL2/SDL.h>
第三个(我设法修复,排序)是当将图像放到屏幕上时,它显示它找不到 .bmp 文件,所以我必须将文件放入源文件部分视觉工作室。它适用于这个测试,但如果我开始合并多个 .bmp 文件,它可能会变得混乱。我应该这样做吗?
这是我的代码,和压缩包里的几乎一模一样
#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;
}
【问题讨论】:
-
您使用的是什么操作系统和 IDE?我猜你正在使用 Visual Studio。那么您的输出文件夹可能与您的工作目录不同(我总是将工作目录设置为输出文件夹)。您需要工作目录中的 DLL。关于包含目录:您在包含路径中添加了什么?