SDL 2课程:第2课-主要非橡胶

大家好! 这是我的第二个SDL 2课程,我仍然可以从这里获得信息。

所以,欢迎上课

主不是橡胶


在上一课中,我很好地安排了Main()函数中的所有内容,但是对于大型程序而言,这样做并不好。 因此,出现了编写函数的机会。 现在我们将使用它。

我们将通过连接SDL并声明几个全局变量来开始编写代码。

#include <SDL2/SDL.h> const int SCREEN_WIDTH = 640; const int SCREEN_HEIGHT = 480; SDL_Window *win = NULL; SDL_Surface *scr = NULL; SDL_Surface *smile = NULL; 

Main()函数之外,我们声明了窗口对象( win ),屏幕表面( scr )和此图的图像( smile )。

让我们编写一个函数来初始化SDL,创建用于绘制的窗口和表面。 看起来像这样:

初始化()
 int init() { if (SDL_Init(SDL_INIT_VIDEO) != 0) { return 1; } win = SDL_CreateWindow("Main  ", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN); if (win == NULL) { return 1; } scr = SDL_GetWindowSurface(win); return 0; } 

在上一课中,您应该熟悉此代码。 在这里,我们初始化了视频系统,创建了一个名称为“ Main not not rubber”的窗口,该窗口具有未定义的坐标和先前设置的尺寸,还获得了该窗口的表面,并将其保存在scr中 。 错误时,此函数将返回1,否则返回0。

现在,您可以编写一个功能来下载必要的媒体文件。 这是:

加载(个)
 int load() { smile = SDL_LoadBMP("smile.bmp"); if (smile == NULL) { return 1; } return 0; } 

此功能非常简单。 我们使用SDL_LoadBMP函数加载.bmp图像。 此函数采用图像文件的路径(完整或相对),并返回SDL_Surface类的对象。 您还应该检查执行的正确性:如果下载出现问题(找不到文件,文件损坏),那么SDL_LoadBMP函数将返回NULL

我们还编写了一个程序来完成应用程序。

退出()
 void quit() { SDL_FreeSurface(smile); smile = NULL; SDL_DestroyWindow(win); SDL_Quit(); } 

这里出现一个新的SDL_FreeSurface函数,该函数只是清洁表面。 在将变量smile设置为NULL之后 。 上一课讨论了所有其他功能。

那是函数编写的结束,我们可以继续Main()

主()
 int main (int argc, char ** args) { if (init() == 1) { return 1; } if (load() == 1) { return 1; } SDL_BlitSurface(smile, NULL, scr, NULL); SDL_UpdateWindowSurface(win); SDL_Delay(2000); quit(); return 0; }; 

在这里,我们首先调用先前编写的init()函数,然后调用我们之前也编写的load()函数。 接下来,使用SDL_BlitSurface函数在scr中显示smile 。 该函数采用一个用于绘制的表面,一个应该从该表面切出的矩形(这对于动画来说是必需的),如果不需要剪切任何内容,则传输NULL ,则绘制该矩形的表面,其坐标用于绘制。 如果坐标为零,则传递NULL

现在该讨论坐标了。 SDL使用不同的坐标系,而不是每个人都习惯的坐标系。 此处坐标为(0,0)的点在左上角。 进行显示以避免不愉快的情况时,必须考虑这一点。

好吧,那很有趣,我们继续。 接下来,我们使用一个已经熟悉的函数更新窗口,使程序冻结2秒钟,调用我们编写的quit()函数,然后结束程序。 在输出中,我们有一个显示2秒钟凉爽笑容的程序。 整个代码如下所示:

 #include <SDL2/SDL.h> const int SCREEN_WIDTH = 640; const int SCREEN_HEIGHT = 480; SDL_Window *win = NULL; SDL_Surface *scr = NULL; SDL_Surface *smile = NULL; int init() { if (SDL_Init(SDL_INIT_VIDEO) != 0) { return 1; } win = SDL_CreateWindow("Main  ", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN); if (win == NULL) { return 1; } scr = SDL_GetWindowSurface(win); return 0; } int load() { smile = SDL_LoadBMP("smile.bmp"); if (smile == NULL) { return 1; } return 0; } void quit() { SDL_FreeSurface(smile); SDL_DestroyWindow(win); SDL_Quit(); } int main (int argc, char ** args) { if (init() == 1) { return 1; } if (load() == 1) { return 1; } SDL_BlitSurface(smile, NULL, scr, NULL); SDL_UpdateWindowSurface(win); SDL_Delay(2000); quit(); return 0; }; 

我希望一切都清楚了。 祝大家好运!

<<上一课|| 下一课>>

Source: https://habr.com/ru/post/zh-CN454414/


All Articles