制作手札---RPG是怎样做成的 (三)
发表日期:2007-01-17作者:[转贴] 出处:
-
三月二十九日 至四月一日:场景显示及行走系统

如果说‘消息处理’是整个程序的核心!那么‘场景显示及行走系统’就是整个游戏的核心。因为作为RPG游戏,其所有事件的发生几乎都是和场景有关,例如:不同的地方会碰到不同的敌人、与不同的人对话得知不同的事情、在特定的地点才能找到宝物等等,所有的这一切都说明‘场景’在一个RPG游戏中的重要地位。鉴于这部分的重要性,我们可再将它划分为:背景显示、行走事件发生 三个子模块,分别处理各自的功能。要注意这可是一个RPG游戏制作的难点哦!下面进行具体分析。

(一)背景显示

通常RPG游戏的场景是采用拼图方式生成的(如《仙剑奇侠传》、《金庸群侠传》等),拼图的好处是节省内存消耗、运行速度快和容易实现滚屏操作等。同时也减轻了美工的工作量,这点对我尤其重要J

我们将计算机屏幕当成拼板,先把屏幕分辨率设为640x480x256色,然后用32x32大小的方格来划分它,这样整个屏幕就分成了15行乘20列的小格子(如图3所示),这就是我们用来表现游戏的舞台了。

舞台搭建好之后,就可以在上面放我们需要的‘道具’,如:树木、石头、房子等等,将它们的大小都统一定为32x32,这样一个格子正好可以放下一个‘道具’;不过你一定会问:难道所有的道具都一样大吗?当然不一样,如果那样就太不真实了,我们把32x32作为最小的道具单位,比较大的道具可以占多个格子。如:一座山的大小为96x64,那么用3x2的格子来放置它就可以了。要注意的是所有道具的长和宽都必须是32的整数倍,这些需要你事先将它们处理好。

请记住每个道具都要有它唯一的编号(如:树木=100、石头=101、房子=102、大山的编号是200~205共6个,因为它占6个格子)。这样当场景布置好后,我们的地图数据也就自然而然的产生了,如图4:

以上就是场景编辑器的原理了(我在游戏制作前先写了一个场景编辑器,用来生成游戏中要用到的场景。场景编辑器附带在程序之中:MapEdit.exe),用场景编辑器设计好场景后先存在磁盘中,以便在游戏中调用。注意:道具的图片应事先制作好并存于另外的图形文件中。这里需要存储的仅仅是对应的数据,而不是真正的图片。

搞清楚原理之后,要在游戏中生成场景就非常简单了,其实就是场景编辑的逆过程,一个是根据场景生成数据,而另一个是根据数据生成场景。我的算法如下:

MapData[20][15]; //事先用场景编辑器生成的地图数据
Picture[nums]; //道具的图片 nums表示道具的总数

void MakeBackGround() //生成场景函数
{

int n;

for( int i=0; i<15; i++) //共15行
for( int j=0; j<20; j++) //共20列
{
n=MapData[ i ][ j ]; //取得该位置的道具编号
Blt( j*32, i*32, Picture[n]); //在此位置(j*32,i*32)画道具
}
}

一切就是这么简单,看着像图4一般的游戏场景,你的心情是不是非常激动?我想你一定和我一样吧!不过可别先忙着高兴,下面的内容会更精彩的。

(二)行走

舞台搭建好了,终于轮到我们的主角出场了(注意了!灯光、奏乐……),要让小飞刀在场景中自由自在的行走可不是一件容易的事,算算一共有上、下、左、右四个行走方向,每个方向3幅图(站立、迈左腿、迈右腿),所以要事先做好12幅图,如下:

游戏中一定要将图片的背景设为透明,这样在画人物的时候就不会覆盖上背景色了(这一技术在DirectDraw中非常容易实现,只要将背景色定为ColorKey就行了)。

其实让角色在场景上移动并不困难,只须改变他的屏幕坐标(x,y)就可以了,但是,一般的地图都比屏幕大的多,如果仅仅改变屏幕坐标的话,小飞刀不是就会走到屏幕外面去了吗?所以我们要让主角位置不动,而使场景移动。你是否注意到了《仙剑》中李逍遥一直就在屏幕的正中间?他行走时场景向着相反的方向移动。对,这就是滚屏技术的效果。

地图是一张很大的画,而屏幕就是我们用来观察的窗口。利用我们先前讲的拼图方法就可以很容易的实现滚屏操作。只须引入一个相对坐标(SX,SY),表示当前屏幕左上角相对于整张地图左上角的位置。那么,生成场景时加入这个相对坐标就可以了,看看改进后的算法:

//场景生成算法

int W=100,H=80; //假如地图的大小为100*80个格子
MapData[W][H]; //事先用场景编辑器生成的地图数据
Picture[nums]; //道具的图片nums表示道具的总数

void MakeBackGround() //生成场景函数
{

int n;

for( int i=SY; i<SY+15; i++) //共15行
for( int j=SX; j<SX+20; j++) //共20列
{
n=MapData[ i ][ j ]; //取得该位置的道具编号
Blt( j*32, i*32, Picture[n]); //在此位置(j*32,i*32)画道具
}
}

怎么样?变化不大但是却很有效,这也正是游戏编程的魅力!这时要让角色移动就只须往相反的方向重绘背景就可以了,而角色一直保持在屏幕的正中间,需要做的工作只是根据行走方向和步伐不停变换图片而已。

还要注意的是行走时的障碍物判断,因为有一些道具是不可跨越的,比如树木、房屋等。那么我们在行走时,应该先计算出下一步是否会碰到障碍,如果有障碍就取消移动。在这个程序中就是判断下一个格子中数据是否为0,因为0代表地面。

好了,到现在为止,一套完整的行走系统就基本上出来了。运行一下,看看自己做的RPG游戏,感觉也不比别人的差嘛!看来只要是用了心,就会有好的心情!

(三)事件发生

不要忘了,这部分还有一个非常重要的功能,那就是事件发生了。其实原理非常简单,就是把相应事件的编号放在地图的某些格子中,那么,当主角一踏入这个格子就会触发对应事件。例如:

我们设定游戏一开始时,小飞刀是在他的房间里。那么他要是想出去的话,就需要执行场景切换这个处理函数,但是应该在什么时候执行呢?这就需要触发一定的事件了。我们假定该事件的编号为1000,那么在地图上把门口处的格子值设为1000。这样无论小飞刀在房间里怎么走动都没有关系,而一旦他走到门口时,编号为1000的场景切换函数就会被触发,于是小飞刀便从屋内来到了屋外。

类似的事件还有很多,踩到陷阱、碰到敌人、发现宝物等等……都可以用同样的方法进行处理,所不同的只是调用的函数。

OK!最艰苦的时段终于熬过去了,现在就让我们以无比轻松的心情来回顾一下这几天的工作成果吧!

首先,我们用拼图的方式建立了游戏的场景显示系统。

然后,以滚屏技术实现了角色在场景上的移动。

最后,了解了事件发生的一般原理。

到目前为止,我们已经拥有了一个可以实实在在运行、真真切切感受的RPG了。不过现在的她才刚刚学会走路,还需要你用大量的营养来浇灌。这样就可以使她迅速成长,变的更加美丽动人!

制作手札---RPG是怎样做成的 (三)相关推荐

  1. 制作手札---RPG是怎样做成的 (四)

    制作手札---RPG是怎样做成的 (四) 发表日期:2007-01-17作者:[转贴] 出处: - 四月二日:对话系统 经常听见有人说"RPG游戏不就是一个小人在屏幕上走来走去,碰到了人就说 ...

  2. 制作手札——RPG是怎样做成的

    题目: <制作手札--RPG是怎样做成的> 备注: 作者:汪疆 成都金点工作室的首席程序员,你可以到他们的主页了解更多的情况. 文章以程序员的标准角度分析了一个RPG游戏所包含的各个部分. ...

  3. 金点工作室制作手札 :《圣剑英雄传之英雄救美》[ZT]

    金点工作室制作手札 题目: <制作手札--RPG是怎样做成的> 备注: 作者:汪疆 成都金点工作室的首席程序员,你可以到他们的主页了解更多的情况. 文章以程序员的标准角度分析了一个RPG游 ...

  4. gif动图怎么制作?怎么把视频做成gif?

    gif动图怎么制作?怎么把视频做成gif呢?我们经常可以看到很多有趣的动态图片,那这些动图gif是怎么做的呢?下面我就给大家介绍一下如果把一段视频做成gif. 首先我们这里需要的是用视频制作成gif, ...

  5. 保留小数点后三位_【Meta分析】Stata制作森林图时,如何保留三位小数?

    系统评价/Meta分析指全面收集所有相关研究并逐个进行严格评价和分析,再用定性或定量合成的方法对资料进行处理得出综合结论的研究方法.在指导学员的过程中发现初学者在学习过程中常常会碰到许多共性问题,本公 ...

  6. 手工制作机器人用彩泥_印度神奇芒果干制作过程,看一遍顶三遍,游客:不会再吃了...

    印度神奇芒果干制作过程,看一遍顶三遍,游客:不会再吃了 随着我国经济迅速发展,人们生活水平得到了很大提升,物质消费得到满足以后,人们更注重精神需求,希望通过旅游要开放视野,放松心情,让自己体验不同地域 ...

  7. 制作Retropie系统树莓派掌机(三)

    制作Retropie系统树莓派掌机(三) 前面介绍了如何制作外壳和按键.这一节再聊如何组装和接线. 1.组装 安装屏幕和主板 先把屏和主板放上去,原外壳上留好限位卡扣或孔.再把电池(2节18650)和 ...

  8. 制作短视频要注意什么?三个内容创作要点别忽视,赶紧收藏起来

    制作短视频要注意什么?三个内容创作要点别忽视,赶紧收藏起来 制作短视频说难也难,但是说简单其实也简单,主要还是得注意一些内容创作要点,只要不忽视这些要点,那么短视频基本上就已经制作成功一半了,正在制作 ...

  9. 【RPG Maker MV】RPG游戏《机器人养成记》制作笔记 - RPG Maker MV 界面介绍

    上一节,我们已经完成了软件的安装和项目的创建,并成功的运行了游戏. 这一节我们将介绍RGP Maker MV的界面元素和基本的使用方法,让大家对软件有个基本的了解. 我们先回到软件的主界面,界面分成工 ...

最新文章

  1. 利用隐藏神经元解决异或问题的小型示例程序
  2. golang exec cmd pipeline zombile 进程
  3. Pyhon 图片透明化
  4. Leetcode 682. 棒球比赛 解题思路及C++实现
  5. MAX10 ADC的一些基知识
  6. Linux下Zend Framework的“Invalid Controller Specified”问题
  7. enum枚举类型的范例
  8. oracle查询表的意思,Oracle表的查询(一)
  9. java 加载spring_spring的加载机制?
  10. 服务器向客户端发送数据自动中断
  11. 计算机系徽 节徽设计,数学节节徽设计图
  12. css3实现3d正方体动画效果
  13. hdu5773 The All-purpose Zero(DP)
  14. 单机版pc端车牌识别
  15. 2019年北京理工大学计算机专硕上岸经验分享
  16. 理不清薪酬,更心愁 穆穆-movno1
  17. [dataframe]python数据集中数据统计分析
  18. platform总线(Linux驱动开发篇)
  19. 收银服务器维修,POS机坏了怎么维修?看看这些对症下药
  20. 2019年12月1号总结

热门文章

  1. Microsoft Cartoon Maker(微软卡通头像制作软件)使用方法详解
  2. 计网复习——传输层习题
  3. DPDK 与DPDK-Pktgen 安装
  4. 小波分析中db1,db2,db3小波有何不同?
  5. 图片转字符画(python)
  6. Ubuntu忘记超级用户root密码,重新设置密码
  7. NVIDIA GeFprce GTX 1080 Ti NVIDIA图形驱动程序版本466.77下载和安装
  8. 【趣味科普】数学中的励志故事
  9. 计算机单位厘米 像素,300dpi的dpi是多少?是像素/英寸吗?还是像素/厘米?
  10. 小升初数学暑假班招生中