大家好! 这是我的第二个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; };
我希望一切都清楚了。 祝大家好运!
<<上一课|| 下一课
>>