SDL (简易直接媒体层) - 创建窗口
外观
< SDL (简易直接媒体层) | 基础知识
在本节中,我们将演示如何创建和销毁基本的 SDL 窗口。以下代码将创建一个名为“SDL 示例”的窗口,宽度为 800 像素,高度为 600 像素,并在屏幕上显示 3000 毫秒。
#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
/* Sets constants */
#define WIDTH 800
#define HEIGHT 600
#define DELAY 3000
int main (int argc, char **argv)
{
/* Initialises data */
SDL_Window *window = NULL;
/*
* 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;
}
/* Creates a SDL window */
window = SDL_CreateWindow("SDL Example", /* Title of the SDL window */
SDL_WINDOWPOS_UNDEFINED, /* Position x of the window */
SDL_WINDOWPOS_UNDEFINED, /* Position y of the window */
WIDTH, /* Width of the window in pixels */
HEIGHT, /* Height of the window in pixels */
0); /* Additional flag(s) */
/* Checks if window has been created; if not, exits program */
if (window == NULL) {
fprintf(stderr, "SDL window failed to initialise: %s\n", SDL_GetError());
return 1;
}
/* Pauses all SDL subsystems for a variable amount of milliseconds */
SDL_Delay(DELAY);
/* Frees memory */
SDL_DestroyWindow(window);
/* Shuts down all SDL subsystems */
SDL_Quit();
return 0;
}
您可以在 GitLab 仓库 中下载本节的源代码。所有源代码存储在 该组 中。
为了创建窗口,我们需要指定它的高度和宽度。在本例中,我们使用宏定义全局常量。我们将宽度设置为 800 像素,高度设置为 600 像素。
#define WIDTH 800
#define HEIGHT 600
在此程序中,我们将不得不暂停 SDL 子系统以使窗口保持打开状态。我们将延迟定义为 3000 毫秒。
#define DELAY 3000
在 C 中,最好先初始化变量,以便了解它们何时以及如何使用。在本例中,我们初始化一个名为 window
的 SDL_Window
指针。在 SDL 中,几乎所有对象都初始化为指针。
SDL_Window *window = NULL;
为了创建窗口,我们需要使用 SDL_CreateWindow
函数并设置一些参数。
window = SDL_CreateWindow("SDL Example", /* Title of the SDL window */
SDL_WINDOWPOS_UNDEFINED, /* Position x of the window */
SDL_WINDOWPOS_UNDEFINED, /* Position y of the window */
WIDTH, /* Width of the window in pixels */
HEIGHT, /* Height of the window in pixels */
0); /* Additional flag(s) */
您可以在 SDL Wiki 中了解更多关于 SDL_CreateWindow
的信息。
在示例代码中,我们使用了 SDL_Delay
函数来暂停 SDL 子系统一段时间(以毫秒为单位),并允许窗口在打开时显示在屏幕上。在本例中,暂停由 DELAY
宏定义为 3000 毫秒。
SDL_Delay(DELAY);
您可以在 SDL Wiki 中了解更多关于 SDL_Delay
的信息。
为了关闭窗口并释放内存,我们必须销毁窗口。销毁 window
比创建它简单得多。
SDL_DestroyWindow(window);
您可以在 SDL Wiki 中了解更多关于 SDL_DestroyWindow
的信息。