大家好! 我决定看一下SDL 2,但是我发现俄语没有任何意义。 我决定写我自己的书,
从这里汲取灵感。
我将跳过SDL 2的安装,而我将通过编写程序立即开始,因此:
您的第一个窗口
让我们从连接SDL 2开始。
#include <SDL2/SDL.h>
在这里,我们将声明几个全局变量。
const int SCREEN_WIDTH = 640; const int SCREEN_HEIGHT = 480;
接下来,向所有人打开熟悉的主要功能。
int main (int argc, char ** args) { if( SDL_Init( SDL_INIT_EVERYTHING ) != 0 ) { return 1; } SDL_Surface* screen_surface = NULL; SDL_Window* window = NULL;
让我们看一下代码。 在主要情况下,命令行参数是从命令行接受的,因此必须接受。 接下来,我们使用
SDL_Init()函数初始化SDL 2。 我们将
SDL_INIT_EVERYTHING传递给它,这意味着我们初始化了所有SDL模块(视频,音频等)。 SDL_Init还有更多标志:
标志SDL_INIT_TIMER-计时器连接;
SDL_INIT_AUDIO-音频连接;
SDL_INIT_VIDEO-视频连接,事件自动连接;
SDL_INIT_JOYSTICK-游戏杆控制连接;
SDL_INIT_HAPTIC-触觉子系统(老实说,我不知道它是什么);
SDL_INIT_GAMECONTROLER-连接控件,操纵杆自动连接;
SDL_INIT_EVENTS-启用事件处理;
SDL_INIT_EVERYTHING-连接上面列出的所有内容;
SDL_INIT_NOPARACHUTE-兼容性检查。
接下来,使用
SDL_CreateWindow()函数创建一个窗口。 如果出现预期的问题,请返回1。
window = SDL_CreateWindow("Hello, SDL 2!",SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SDL_SCREEN_WIDTH, SDL_SCREEN_HEIGHT, SDL_WINDOW_SHOWN); if (window == NULL) { return 1; }
SDL_CreateWindow()函数接受窗口名称,OX窗口位置,OY窗口位置,窗口宽度,窗口高度和标志。 现在,我们将绕过标志
SDL_WINDOW_SHOWN 。
还有其他用于创建窗口的标志。
标志SDL_WINDOW_FULLSCREEN-以全屏模式打开一个窗口,更改桌面的分辨率;
SDL_WINDOW_FULLSCREEN_DESKTOP-在此桌面的允许下以全屏模式打开一个窗口;
SDL_WINDOW_OPENGL-一个支持OpenGL的窗口;
SDL_WINDOW_HIDDEN-窗口被隐藏;
SDL_WINDOW_BORDERLESS-没有框架的窗口;
SDL_WINDOW_RESIZABLE-您可以调整窗口大小;
SDL_WINDOW_MINIMIZED-窗口被最小化;
SDL_WINDOW_MAXIMIZED-窗口被最大化;
如果我们现在编译并运行程序,我们将看到一个640x480的窗口,白色填充,稍后将关闭。 太好了! 为了稍微享受这个奇迹,我们可以编写
SDL_Delay(2000) 。 它将使程序冻结2秒钟。
当然,只有一扇窗户是不错的,但是拉上窗户会更酷,对吧? 为此,请创建一个可以在上面绘制所有内容的表面,因为直接在窗口中进行绘制很难看。
screen_surface = SDL_GetWindowSurface(window); SDL_FillRect(screen_surface, NULL, SDL_MapRGB(screen_surface->format, 0, 255, 0)); SDL_UpdateWindowSurface(window);
首先,我们使用
SDL_GetWindowSurface()函数获得窗口表面。 这样做的目的是不必指示表面的尺寸,其格式,而是立即获得成品表面。 而且,不需要在窗口中绘制此表面-它会自己做所有事情。
然后,我们使用
SDL_FillRect()将表面涂成绿色。 我们编写了
SDL_MapRGB ,告诉程序我们将使用RGB(红色绿色蓝色)来设置颜色。
最后,我们应该使用
SDL_UpdateWindowSurface()函数更新窗口,以便显示我们告诉他的内容。
在此阶段,当您启动程序时,将显示一个充满亮绿色的窗口,该窗口将在2秒钟内关闭。
完成程序后,我们需要清除不必要文件中的RAM,关闭窗口,通常确定程序正确终止。 在这方面,特别准备的功能将为我们提供帮助。
SDL_DestroyWindow(window); SDL_Quit();
SDL_DestroyWindow()函数关闭窗口,而
SDL_Quit()函数
取消初始化先前与
SDL_Init()函数连接的所有模块。
好吧,第一课结束了,我希望一切都清楚了。 这是我最后得到的代码:
#include <SDL2/SDL.h> const int SCREEN_WIDTH = 640; const int SCREEN_HEIGHT = 480; int main (int argc, char ** args) { if( SDL_Init( SDL_INIT_EVERYTHING ) != 0 ) { return 1; } SDL_Surface* screen_surface = NULL; SDL_Window* window = NULL; window = SDL_CreateWindow("Hello, SDL 2!",SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN); if (window == NULL) { return 1; } screen_surface = SDL_GetWindowSurface(window); SDL_FillRect(screen_surface, NULL, SDL_MapRGB( screen_surface->format, 0, 255, 0)); SDL_UpdateWindowSurface(window); SDL_Delay(2000); SDL_DestroyWindow(window); SDL_Quit(); return 0; };
祝大家好运!
下一课
>>