你好伙计Overflowers! 我最近开始学习SDL。我选择简单的直接媒体层作为我的C ++知识的外部API,因为我发现它为游戏开发者提供了最具视觉效果的增强机制。请考虑以下代码:
#include <iostream>
#include "SDL/SDL.h"
using std::cerr;
using std::endl;
int main(int argc, char* args[])
{
// Initialize the SDL
if (SDL_Init(SDL_INIT_VIDEO) != 0)
{
cerr << "SDL_Init() Failed: " << SDL_GetError() << endl;
exit(1);
}
// Set the video mode
SDL_Surface* display;
display = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
if (display == NULL)
{
cerr << "SDL_SetVideoMode() Failed: " << SDL_GetError() << endl;
exit(1);
}
// Set the title bar
SDL_WM_SetCaption("SDL Tutorial", "SDL Tutorial");
// Load the image
SDL_Surface* image;
image = SDL_LoadBMP("LAND.bmp");
if (image == NULL)
{
cerr << "SDL_LoadBMP() Failed: " << SDL_GetError() << endl;
exit(1);
}
// Main loop
SDL_Event event;
while(1)
{
// Check for messages
if (SDL_PollEvent(&event))
{
// Check for the quit message
if (event.type == SDL_QUIT)
{
// Quit the program
break;
}
}
// Game loop will go here...
// Apply the image to the display
if (SDL_BlitSurface(image, NULL, display, NULL) != 0)
{
cerr << "SDL_BlitSurface() Failed: " << SDL_GetError() << endl;
exit(1);
}
//Update the display
SDL_Flip(display);
}
// Tell the SDL to clean up and shut down
SDL_Quit();
return 0;
}
我所做的只是制作一个屏幕表面,双重缓冲它,制作图像的另一个表面,将两者一起搞定,并且由于某种原因,当我构建应用程序时,它立即关闭!应用程序构建成功但在没有窗口打开的情况下关闭!这真是令人沮丧。
我正在使用XCode5
和SDL 2.0.3
:)
需要帮助!
编辑:在错误日志中显示,它显示SDL_LoadBMP(): Failed to load LAND.bmp
。 bmp保存在根目录下,与main.cpp
文件夹相同的文件夹中?为什么这不起作用?
答案 0 :(得分:0)
您应该能够使用图像的绝对(完整)路径来测试代码。这将验证代码是否真正有效。
为了能够使用具有绝对路径的资源,您应该创建一个构建阶段来复制文件。目的地应设置为&#39;产品目录&#39;。您可以将Subpath留空或提供一个目录来放置资源(当您获得大量资源时这将非常有用),例如纹理。如果您提供子路径,则更改您的代码,使其为textures/LAND.bmp
您还可以使用构建阶段来打包SDL2.framework和其他任何内容,例如SDL2_image等与您的最终申请。这将允许在其计算机上没有SDL的用户运行该应用程序。为此,创建另一个构建阶段,将Detination设置为&#39; Frameworks&#39;并将子路径留空。然后,只需添加要与应用程序打包的任何框架。您要在“构建设置”中进行的另一个设置是更改“运行路径搜索路径”。 (在&#39;链接&#39;下找到)为@executeable_path/../Frameworks
,以便应用程序知道在哪里可以找到打包的框架
我有一个关于在Xcode中配置SDL2的教程以及一个快速的模板