SDL (简单直接媒体层) - 入门
外观
< SDL (简单直接媒体层) | 基础
在本节中,我们将向您展示如何初始化和关闭 SDL 子系统。
#include <stdio.h> /* printf and fprintf */
#ifdef _WIN32
#include <SDL/SDL.h> /* Windows-specific SDL2 library */
#else
#include <SDL2/SDL.h> /* macOS- and GNU/Linux-specific */
#endif
int main (int argc, char **argv)
{
/*
* Initialises the SDL video subsystem (as well as the events subsystem).
* Returns 0 on success or a negative error code on failure using SDL_GetError().
*/
if (SDL_Init(SDL_INIT_VIDEO) != 0)
{
fprintf(stderr, "SDL failed to initialise: %s\n", SDL_GetError());
return 1;
}
printf("SDL initialised!");
/* Shuts down all SDL subsystems */
SDL_Quit();
return 0;
}
您可以从这个 GitLab 仓库 下载本节的源代码。所有源代码都存储在这个 组 中。
SDL2 所需的基本函数位于 <SDL/SDL.h>
库或 <SDL2/SDL.h>
库中,具体取决于操作系统,因此上述源代码使用
#ifdef _WIN32
#include <SDL/SDL.h> /* Windows-specific SDL2 library */
#else
#include <SDL2/SDL.h> /* macOS- and GNU/Linux-specific */
#endif
在为 Windows 机器编写代码时,必须包含
int main (int argc, char **argv)
因为 SDL 会覆盖 main
宏。根据 SDL 的 FAQWindows
您应该使用main()
而不是WinMain()
,即使您正在创建一个 Windows 应用程序,因为 SDL 提供了一个WinMain()
版本,它在调用您的主代码之前执行一些 SDL 初始化。如果您出于某种原因需要使用WinMain()
,请查看 SDL 源代码中的src/main/win32/SDL_main.c
,以了解您在WinMain()
函数中需要执行哪些初始化才能使 SDL 正常工作。
使用 SDL 子系统时,您必须始终先初始化它。在下面的 if 语句中,我们使用标志 SDL_INIT_VIDEO
初始化 SDL 视频子系统。如果成功,它将返回 0
,否则它将返回一个负的错误代码,并将使用 SDL_GetError 通过 stderr
流打印有关错误的信息。
/*
* Initialises the SDL video subsystem (as well as the events subsystem).
* Returns 0 on success or a negative error code on failure using SDL_GetError().
*/
if (SDL_Init(SDL_INIT_VIDEO) != 0)
{
fprintf(stderr, "SDL failed to initialise: %s\n", SDL_GetError());
return 1;
}
您可以使用 |
运算符初始化多个子系统
if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO) != 0)
{
fprintf(stderr, "SDL failed to initialise: %s\n", SDL_GetError());
return 1;
}
有关 SDL_Init
函数子系统及其标志的所有信息,请参阅 SDL Wiki 的 SDL_Init 页面。
要关闭 SDL 子系统,您必须执行
SDL_Quit();
但是,这只会关闭主要子系统;关闭 TTF 子系统需要一个不同的函数
TTF_Quit();