【教程】Rothsdad教大家写Linux游戏 [已更新至第二节]

游戏讨论
头像
Michael_yan
帖子: 150
注册时间: 2010-11-17 0:03
来自: Bangalore, india.

Re: 【教程】Rothsdad教你写Linux游戏(一)

#16

帖子 Michael_yan » 2010-11-22 14:08

支持以下 :em11
吃的苦中苦,方为人上人!
头像
Rothsdad
帖子: 395
注册时间: 2009-04-18 11:41

Re: 【教程】Rothsdad教你写Linux游戏(一)

#17

帖子 Rothsdad » 2010-11-23 14:01

最近在准备考研,呵呵,忙里抽闲,还是写下了教程的第二篇。(恩,自我鼓励一下)

其实从这次教程,才算真正的步入游戏编写的大门。

我本想一篇教程发成一个主题,但怕以后写多了会很凌乱,所以都跟这个主题走咯,同时也方便大家查阅。

不多说啦,下面是本次的教程:

【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;
在主函数main的开始,声明了两个SDL_Surface指针,SDL_Surface用来指向一个图像,在这个程序中,我们将处理两个图像。
一个是显示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_Init()是我们第一个调用的SDL函数,这个函数会初始化所有SDL的子系统,然后我们就可以用SDL的各种函数了。

下一个是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 );
我们使用SDL_BlitSurface()来加载函数,这个函数的第一个参数是源surface,第三个是目的surface,其余参数我们以后会用到。

到此为止,我们已经将图像加载到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游戏(一)

#18

帖子 Rothsdad » 2010-11-23 14:15

cjxgm 写了:Why not OpenGL?
最近在搞64K动画,希望游戏的一些效果能对我有帮助
我想sdl会让大家很快的进入游戏编程的世界,体验编写游戏的乐趣。

opengl相对来说复杂很多。

我会考虑将opengl加入后续内容的。
头像
Rothsdad
帖子: 395
注册时间: 2009-04-18 11:41

Re: 【教程】Rothsdad教你写Linux游戏[已更新至第二节]

#19

帖子 Rothsdad » 2010-11-23 14:17

恩,看到大家的热情和支持,我会努力的。

再次谢谢大家的支持咯~
头像
我就是我2
帖子: 1215
注册时间: 2008-12-13 10:55
来自: the Earth
联系:

Re: 【教程】Rothsdad教大家写Linux游戏 [已更新至第二节]

#20

帖子 我就是我2 » 2010-11-23 14:55

:em20
不过也支持了
苏东坡问佛印道:“人人皆念观世音菩萨,观世音菩萨念谁?”
佛印答道:“念观世音菩萨。”
苏东坡诧异:“为何亦念观世音菩萨?”
曰:“求人不如求己。”


dropbox 誰好奇,誰來點
勞碌一生又如何,虛度一生又如何,你過得開心嗎?人活著就要開心嘛!
everyx
帖子: 104
注册时间: 2010-08-08 14:34

Re: 【教程】Rothsdad教大家写Linux游戏 [已更新至第二节]

#21

帖子 everyx » 2010-11-23 16:45

楼主好人,学习学习。 :em11
27481716
帖子: 6
注册时间: 2010-11-26 11:07

Re: 【教程】Rothsdad教大家写Linux游戏 [已更新至第二节]

#22

帖子 27481716 » 2010-11-26 17:57

:em11
蒋彩阳
帖子: 15
注册时间: 2010-02-01 16:46

Re: 【教程】Rothsdad教大家写Linux游戏 [已更新至第二节]

#23

帖子 蒋彩阳 » 2010-11-28 11:12

我也想编辑游戏啊!!我有本linux游戏编程的pdf文件,但是不知道怎么上传~
iorizzm
帖子: 2
注册时间: 2008-05-25 16:08

Re: 【教程】Rothsdad教大家写Linux游戏 [已更新至第二节]

#24

帖子 iorizzm » 2010-11-30 23:26

期待下一篇
yeyaxx
帖子: 10
注册时间: 2010-11-05 0:43

Re: 【教程】Rothsdad教大家写Linux游戏 [已更新至第二节]

#25

帖子 yeyaxx » 2010-12-01 20:51

蒋彩阳 写了:我也想编辑游戏啊!!我有本linux游戏编程的pdf文件,但是不知道怎么上传~
想办法穿个网盘上吧。大家弄个小团队。玩玩!!!! :em02
头像
chen2008844
帖子: 6
注册时间: 2010-04-23 9:58

Re: 【教程】Rothsdad教大家写Linux游戏 [已更新至第二节]

#26

帖子 chen2008844 » 2010-12-03 17:30

支持哟!很好的入门教程,对游戏感兴趣的小白帮助很大。加油哟!期待
popoweiqi
帖子: 85
注册时间: 2009-09-14 20:38

Re: 【教程】Rothsdad教大家写Linux游戏 [已更新至第二节]

#27

帖子 popoweiqi » 2010-12-04 15:04

mark。。。以后有环境了再来。 :em11 :em11
有些事,我们明知道是错的,也要去坚持,因为不甘心;有些人,我们明知道是爱的,也要去放弃,因为没结局;有时候,我们明知道没路了,却还在前行,因为习惯了。
wenqungang
帖子: 40
注册时间: 2009-11-13 17:48

Re: 【教程】Rothsdad教大家写Linux游戏 [已更新至第二节]

#28

帖子 wenqungang » 2010-12-07 20:53

支持LZ,等待第三节上课内容 :em02
20091157
帖子: 21
注册时间: 2010-03-01 11:51

Re: 【教程】Rothsdad教大家写Linux游戏 [已更新至第二节]

#29

帖子 20091157 » 2010-12-08 9:55

什么时候更新? :em11 非常期待楼主
huangyun
帖子: 49
注册时间: 2006-11-27 14:21
联系:

Re: 【教程】Rothsdad教大家写Linux游戏 [已更新至第二节]

#30

帖子 huangyun » 2010-12-11 0:11

Lazy Foo 有一个SDL变成的入门教程很不错,不过是英文的: http://www.lazyfoo.net/SDL_tutorials/
回复