第10章 卷动背景

版权声明:转载请注明出处 https://blog.csdn.net/weixin_39918693/article/details/87984614

我们在大多数动作和接机游戏中看到的背景移动效果使用的是基于图片单元的卷动。虽然这种技术已经有几十年了,但它仍旧被用来渲染背景

当时计算机内存极为有限,使用基于图片单元的卷动方式是因为它极为高效

虚拟屏幕缓冲区


1、卷动

卷动是在屏幕窗口中显示大的虚拟游戏世界的一小部分,然后通过移动窗口中的视图来反应游戏角色游戏世界内位置的变换

背景由某种形式的影像或地形组成,精灵就绘制在背景之上。背景可以仅仅是游戏动作背后的一副漂亮的图画,也可以如卷动器那样参与动作

我们不能仅依赖于单一的酷的技术来作为整个游戏的基础,我们要设计好自己的范例,做出自己的标准,而不是跟随和模仿

现在的游戏都在拼物理和人工智能

卷动背景的真实力量来自名为铺砌(tiling)的技术。铺砌是这么一个过程,其中没有真正的背景,而是由图片单元阵列形成要显示的背景

图片单元铺砌成的背景和完全位图型的背景相比,只需要非常少的内存

扫描二维码关注公众号,回复: 5639663 查看本文章

2、基于图片单元的卷动(静态)

这种实现方式在内存中创建了一个足够大gameworld表面,所做的只是在不同时刻将这个大表面的不同部分渲染在窗口中

该方法从位图中装载图片单元,然后使用地图数据来填充由内存中的大位图所表示的虚拟卷动表面

TileStaticScroll通过将图片单元绘制到创建于内存中的一个大位图图像上来形成一个大地图


3、动态渲染的图片单元

动态绘制的地图,连接性不太好(有可能是因为地图数组没有设计好)

Tile_Dynamic_Scroll程序

只是显示图片单元是不够的,我们需要创建虚拟背景,并且将图片单元装载到它上面,然后卷动整个游戏世界

在运行时动态的构造出地图不是一个好的解决方案。但是如果游戏能从具备随机生成游戏世界这样的功能中获益的话,那么这样做时合适的,结果是值得的

图片单元都是编号了的,我们应该在地图数组中以编号来引用位图中对应的图片单元

使用Mappy创建图片单元地图——读入一个大的照片文件然后将其转换为图片单元地图

.csv文件是以逗号分隔的值的文件,它实际上以文本格式存储(也可以用文本编辑器打开)

这个动态程序与静态程序类似,但它直接将图片单元绘制到屏幕上,无需内存中的大位图。这个程序也将使用更小的虚拟背景,从而减少地图数组的尺寸——这不是为了节省内存,而是为了让程序更可管理


4、基于位图的卷动

图片之间有明显不连续,这种实现方式和基于图片单元的静态实现十分相似

全位图卷动实现将单个位图卷绕到卷动窗口中而无需使用图片单元。代码不仅会变得复杂,而且使用图片卷绕来渲染基于位图的卷动器也比较慢

为了让基于位图的卷动尽可能高效地执行,我建议让源图片保持和屏幕一样的尺寸(有利有弊,但都可解决)

具体步骤如下:

  • 1、装载卷动器所用的源位图
  • 2、创建源位图4倍尺寸的卷动缓冲区(其实就是表面)
  • 3、将源位图复制到卷动缓冲区的4个角
  • 4、渲染卷动缓冲区中与卷动位置有关的部分

对于这种卷动方式,我们可以已任何方向卷动它,比前面的更灵活

个人不理解效果如何

猜你喜欢

转载自blog.csdn.net/weixin_39918693/article/details/87984614