
【教程】Rothsdad教大家写Linux游戏 [已更新至第二节]
- Michael_yan
- 帖子: 150
- 注册时间: 2010-11-17 0:03
- 来自: Bangalore, india.
- Rothsdad
- 帖子: 395
- 注册时间: 2009-04-18 11:41
Re: 【教程】Rothsdad教你写Linux游戏(一)
最近在准备考研,呵呵,忙里抽闲,还是写下了教程的第二篇。(恩,自我鼓励一下)
其实从这次教程,才算真正的步入游戏编写的大门。
我本想一篇教程发成一个主题,但怕以后写多了会很凌乱,所以都跟这个主题走咯,同时也方便大家查阅。
不多说啦,下面是本次的教程:
【Rothsdad教你写Linux游戏(二)】——显示图像
这次我们先从最基础的学起。游戏中什么是最基础的呢?当然是显示图像咯,可以想象,如果一个游戏没有图像,那该是什么情况(图像!?最古老,最有人气,最好玩的MUD不就没有图像吗?)
我们先说一说准备工作
好,我们开始:
打开编辑器,输入下面代码:(看不懂没关系,我会一行一行讲解的)
何为头文件?它是一个包含各种相关函数和类型信息的文件,有了它就可以引入相关的函数和数据类型
在主函数main的开始,声明了两个SDL_Surface指针,SDL_Surface用来指向一个图像,在这个程序中,我们将处理两个图像。
一个是显示hello的图片,另一个是用来显示hello图片的显示层(surface),所以第二个surface在屏幕上是隐藏的。
不论什么时候使用指针时,一定要记得初始化
还有,当使用SDL时,必须使用向上面写的main函数的声明,而不能写成其它形式,比如void main()这样子SDL是不支持的。
SDL_Init()是我们第一个调用的SDL函数,这个函数会初始化所有SDL的子系统,然后我们就可以用SDL的各种函数了。
下一个是SDL_SetVideoMode(),用来初始化一个640x480的32位色的窗口,最后SDL_SWSURFACE这个参数是用来设置内存中的surface,
当SDL_SetVideoMode()执行后,它会返回一个指向窗口surface的指针。
当设置好窗口后,我们用SDL_LoadBMP()来加载图片,他的参数就是图片的路径并返回一个指针指向已加载的SDL_Surface,如果加载失败,
将会返回NULL。
我们使用SDL_BlitSurface()来加载函数,这个函数的第一个参数是源surface,第三个是目的surface,其余参数我们以后会用到。
到此为止,我们已经将图像加载到screen,必须刷新它我们才能看到图像,可以用SDL_Flip()来刷新。如果不刷新的话,看到的将是黑屏。
为了让窗口在桌面上停留一段时间,所以用SDL_Delay()停留一段时间,这里是2000ms,即两秒。以后我们会用到更好的方法。
现在我们已经不再使用图像了,所以我们一定记得要及时释放它,不然就内存泄漏啦(很严重的哦,呵呵)
在程序的最后,使用SDL_Quit()来退出SDL。
突然,有位小白问道,为什么不释放screen这个surface指针呢?
不用担心,SDL_Quit()已经替你完成了释放工作。
将上述代码保存为你的游戏源文件,比如lesson2.cpp,然后编译它吧!
执行吧,是不是显示出图像了呢?
恭喜!!你已经完成了你的第一个图像应用程序!
敲了好长时间哈,这节就到这里吧,啊,我的咖啡已经凉了,喝咖啡咯~下次见:-)
其实从这次教程,才算真正的步入游戏编写的大门。
我本想一篇教程发成一个主题,但怕以后写多了会很凌乱,所以都跟这个主题走咯,同时也方便大家查阅。
不多说啦,下面是本次的教程:
【Rothsdad教你写Linux游戏(二)】——显示图像
这次我们先从最基础的学起。游戏中什么是最基础的呢?当然是显示图像咯,可以想象,如果一个游戏没有图像,那该是什么情况(图像!?最古老,最有人气,最好玩的MUD不就没有图像吗?)
我们先说一说准备工作
代码: 全选
1.准备一张bmp图片(内容不限,大小不限,但必须是bmp)(为什么用bmp?其他格式不行吗?答案当然是可以咯,不过这个我们以后会学到的)
2.仔细看过上节内容,并配置好你的编程环境
3.一杯咖啡(可乐也行),用来庆祝成功后的喜悦!(为什么是咖啡可乐?这个..不解释)
打开编辑器,输入下面代码:(看不懂没关系,我会一行一行讲解的)
代码: 全选
//加入SDL所需要的头文件
#include "SDL/SDL.h"
代码: 全选
int main( int argc, char* args[] )
{
//图像声明
SDL_Surface* hello = NULL;
SDL_Surface* screen = NULL;
一个是显示hello的图片,另一个是用来显示hello图片的显示层(surface),所以第二个surface在屏幕上是隐藏的。
不论什么时候使用指针时,一定要记得初始化
还有,当使用SDL时,必须使用向上面写的main函数的声明,而不能写成其它形式,比如void main()这样子SDL是不支持的。
代码: 全选
//初始化SDL
SDL_Init( SDL_INIT_EVERYTHING );
//设置screen
screen = SDL_SetVideoMode( 640, 480, 32, SDL_SWSURFACE );
//加载图片
hello = SDL_LoadBMP( "hello.bmp" );
下一个是SDL_SetVideoMode(),用来初始化一个640x480的32位色的窗口,最后SDL_SWSURFACE这个参数是用来设置内存中的surface,
当SDL_SetVideoMode()执行后,它会返回一个指向窗口surface的指针。
当设置好窗口后,我们用SDL_LoadBMP()来加载图片,他的参数就是图片的路径并返回一个指针指向已加载的SDL_Surface,如果加载失败,
将会返回NULL。
代码: 全选
//将图像加载到screen
SDL_BlitSurface( hello, NULL, screen, NULL );
//刷新Screen
SDL_Flip( screen );
//暂停2000ms
SDL_Delay( 2000 );
到此为止,我们已经将图像加载到screen,必须刷新它我们才能看到图像,可以用SDL_Flip()来刷新。如果不刷新的话,看到的将是黑屏。
为了让窗口在桌面上停留一段时间,所以用SDL_Delay()停留一段时间,这里是2000ms,即两秒。以后我们会用到更好的方法。
代码: 全选
//释放已加载的图像
SDL_FreeSurface( hello );
//退出SDL
SDL_Quit();
return 0;
}
在程序的最后,使用SDL_Quit()来退出SDL。
突然,有位小白问道,为什么不释放screen这个surface指针呢?
不用担心,SDL_Quit()已经替你完成了释放工作。
将上述代码保存为你的游戏源文件,比如lesson2.cpp,然后编译它吧!
执行吧,是不是显示出图像了呢?
恭喜!!你已经完成了你的第一个图像应用程序!
敲了好长时间哈,这节就到这里吧,啊,我的咖啡已经凉了,喝咖啡咯~下次见:-)
- Rothsdad
- 帖子: 395
- 注册时间: 2009-04-18 11:41
Re: 【教程】Rothsdad教你写Linux游戏(一)
我想sdl会让大家很快的进入游戏编程的世界,体验编写游戏的乐趣。cjxgm 写了:Why not OpenGL?
最近在搞64K动画,希望游戏的一些效果能对我有帮助
opengl相对来说复杂很多。
我会考虑将opengl加入后续内容的。
- Rothsdad
- 帖子: 395
- 注册时间: 2009-04-18 11:41
Re: 【教程】Rothsdad教你写Linux游戏[已更新至第二节]
恩,看到大家的热情和支持,我会努力的。
再次谢谢大家的支持咯~
再次谢谢大家的支持咯~
- 我就是我2
- 帖子: 1215
- 注册时间: 2008-12-13 10:55
- 来自: the Earth
- 联系:
Re: 【教程】Rothsdad教大家写Linux游戏 [已更新至第二节]

不过也支持了
苏东坡问佛印道:“人人皆念观世音菩萨,观世音菩萨念谁?”
佛印答道:“念观世音菩萨。”
苏东坡诧异:“为何亦念观世音菩萨?”
曰:“求人不如求己。”
自然灋則
dropbox 誰好奇,誰來點
勞碌一生又如何,虛度一生又如何,你過得開心嗎?人活著就要開心嘛!
佛印答道:“念观世音菩萨。”
苏东坡诧异:“为何亦念观世音菩萨?”
曰:“求人不如求己。”
自然灋則
dropbox 誰好奇,誰來點
勞碌一生又如何,虛度一生又如何,你過得開心嗎?人活著就要開心嘛!
-
- 帖子: 104
- 注册时间: 2010-08-08 14:34
Re: 【教程】Rothsdad教大家写Linux游戏 [已更新至第二节]
楼主好人,学习学习。 

-
- 帖子: 6
- 注册时间: 2010-11-26 11:07
-
- 帖子: 15
- 注册时间: 2010-02-01 16:46
Re: 【教程】Rothsdad教大家写Linux游戏 [已更新至第二节]
我也想编辑游戏啊!!我有本linux游戏编程的pdf文件,但是不知道怎么上传~
-
- 帖子: 2
- 注册时间: 2008-05-25 16:08
-
- 帖子: 10
- 注册时间: 2010-11-05 0:43
Re: 【教程】Rothsdad教大家写Linux游戏 [已更新至第二节]
想办法穿个网盘上吧。大家弄个小团队。玩玩!!!!蒋彩阳 写了:我也想编辑游戏啊!!我有本linux游戏编程的pdf文件,但是不知道怎么上传~

- chen2008844
- 帖子: 6
- 注册时间: 2010-04-23 9:58
Re: 【教程】Rothsdad教大家写Linux游戏 [已更新至第二节]
支持哟!很好的入门教程,对游戏感兴趣的小白帮助很大。加油哟!期待
-
- 帖子: 85
- 注册时间: 2009-09-14 20:38
Re: 【教程】Rothsdad教大家写Linux游戏 [已更新至第二节]
mark。。。以后有环境了再来。



有些事,我们明知道是错的,也要去坚持,因为不甘心;有些人,我们明知道是爱的,也要去放弃,因为没结局;有时候,我们明知道没路了,却还在前行,因为习惯了。
-
- 帖子: 40
- 注册时间: 2009-11-13 17:48
Re: 【教程】Rothsdad教大家写Linux游戏 [已更新至第二节]
支持LZ,等待第三节上课内容 

-
- 帖子: 21
- 注册时间: 2010-03-01 11:51
Re: 【教程】Rothsdad教大家写Linux游戏 [已更新至第二节]
什么时候更新?
非常期待楼主

-
- 帖子: 49
- 注册时间: 2006-11-27 14:21
- 联系:
Re: 【教程】Rothsdad教大家写Linux游戏 [已更新至第二节]
Lazy Foo 有一个SDL变成的入门教程很不错,不过是英文的: http://www.lazyfoo.net/SDL_tutorials/