首页 > 编程知识 正文

SDL 2 游戏编程一第一个形界面,怎样编程一款游戏

时间:2023-05-03 08:12:44 阅读:234196 作者:4893

原文链接Hello SDL: Your First Graphics Window

//Using SDL and standard IO#include <SDL.h>#include <stdio.h>//Screen dimension constantsconst int SCREEN_WIDTH = 640;const int SCREEN_HEIGHT = 480;

在源文件的开始我们需要包含SDL的库,要不然怎么使用SDL提供的函数和数据类型呢。同时也要包含C语言的标准IO,这是为了在控制台输出错误信息的。当然用iostream也没什么问题,但是使用printf函数会使程序更加的线程安全。你们爱用啥用啥吧。

包含了头文件之后,声明窗口的大小。

int main( int argc, char* args[] ){ //The window we'll be rendering to SDL_Window* window = NULL; //The surface contained by the window SDL_Surface* screenSurface = NULL; //Initialize SDL if( SDL_Init( SDL_INIT_VIDEO ) < 0 ) { printf( "SDL could not initialize! SDL_Error: %sn", SDL_GetError() ); }Here's the top

这段代码是main函数的开头部分,注意(敲黑板),main函数的参数有两个,是一个int类型,紧接着就是一个char*数组,返回值的类型是int,如果使用其他类型或者参数数目不对那么会导致编译错误。

在main函数中,我们先声明了SDL window, 这是一会儿我们要创建的窗口,然后声明了SDL surface,SDL surface仅仅是一个2D图像,它可以是从文件中读取的图片,也可以是窗口中显示的图像,在这里,它是window窗口中显示的图像。

下一步,我们需要初始化SDL,在初始化SDL之前,SDL提供的任何函数都是不可用的。由于我们只想初始化视频子系统,所以只给初始化函数传递SDL_INIT_VIDEO标志作为参数。

当发生异常的时候,SDL_Init函数将会返回-1,当发生异常的时候,我们希望在控制台显示有关异常的信息。

SDL_GetError是一个非常好用的函数,当程序发生错误,它会告诉你哪个SDL函数出错了以及出了什么错误。

else { //Create window window = SDL_CreateWindow( "SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN ); if( window == NULL ) { printf( "Window could not be created! SDL_Error: %sn", SDL_GetError() ); }

如果SDL成功的初始化了,我们希望通过SDL_CreateWindow函数来创建一个窗口。第一个参数是窗口的标题名称。第二第三个参数是定义了窗口出现的位置,分别是x坐标和y坐标,反正我们不关心它出现在哪儿,所以使用SDL_WINDOWPOS_UNDEFINED作为参数。

第四第五个参数是窗口的宽度和高度,最后一个参数是creation flags,SDL_WINDOW_SHOWN确保了窗口被创建的时候是可见的。

如果创建窗口发生了错误,那么SDL_CreateWindow将会返回NULL。如果窗口没有被创建,我们希望在控制台显示错误信息。

else { //Get window surface screenSurface = SDL_GetWindowSurface( window ); //Fill the surface white SDL_FillRect( screenSurface, NULL, SDL_MapRGB( screenSurface->format, 0xFF, 0xFF, 0xFF ) ); //Update the surface SDL_UpdateWindowSurface( window ); //Wait two seconds SDL_Delay( 2000 ); } }

窗口被成功创建的话,我们需要得到指向窗口的surface的指针,这样才能在上面绘制图像。SDL_GetWindowSurface函数就是用来做这个的。

为了使这个教程尽可能的简单,我们需要做的就是用白色的方形覆盖整个surface,这里我们用到SDL_FillRect函数,这里不需要关心这个函数的作用和参数,用就是了。这一章的目的就是弄个窗口而已~。

关于渲染还有个很重要的事情,就是,即便你在surface上绘制一个图形,你也不一定能看得见它。在你绘制完所有的图形之后,你需要更新窗口你才能看见你绘制的图形。SDL_UpdataWindowSurface函数就是用来更新窗口的。

在我们做了以上步骤之后,你能看见的只不过是一个窗口闪了一下就没了。要让窗口保持一段时间我们需要调用SDL_Delay函数(参数是毫秒)。

还有就是,当SDL_Delay函数被执行时,这个程序无法接受任何从键盘或者鼠标的输入。

//Destroy window SDL_DestroyWindow( window ); //Quit SDL subsystems SDL_Quit(); return 0;}

在窗口出现两秒后,我们需要析构这个窗口来释放内存。SDL_DestoryWindow函数可以完成析构的过程,同时它也会析构我们创建的surface。之后退出SDL并结束整个程序。

完整代码如下所示:

/*This source code copyrighted by Lazy Foo' Productions (2004-2015)and may not be redistributed without written permission.*///Using SDL and standard IO#include <SDL.h>#include <stdio.h>//Screen dimension constantsconst int SCREEN_WIDTH = 640;const int SCREEN_HEIGHT = 480;int main( int argc, char* args[] ){ //The window we'll be rendering to SDL_Window* window = NULL; //The surface contained by the window SDL_Surface* screenSurface = NULL; //Initialize SDL if( SDL_Init( SDL_INIT_VIDEO ) < 0 ) { printf( "SDL could not initialize! SDL_Error: %sn", SDL_GetError() ); } else { //Create window window = SDL_CreateWindow( "SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN ); if( window == NULL ) { printf( "Window could not be created! SDL_Error: %sn", SDL_GetError() ); } else { //Get window surface screenSurface = SDL_GetWindowSurface( window ); //Fill the surface white SDL_FillRect( screenSurface, NULL, SDL_MapRGB( screenSurface->format, 0xFF, 0xFF, 0xFF ) ); //Update the surface SDL_UpdateWindowSurface( window ); //Wait two seconds SDL_Delay( 2000 ); } } //Destroy window SDL_DestroyWindow( window ); //Quit SDL subsystems SDL_Quit(); return 0;}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。