`
yuanlanjun
  • 浏览: 1185509 次
文章分类
社区版块
存档分类
最新评论

DirectX游戏编程入门——第二部分(游戏编程工具箱) ——卷动背景

 
阅读更多

本系列文章由 net_assassin 整理编写,转载请注明出处。

http://blog.csdn.net/net_assassin/article/category/1100363


作者:net_assassin 邮箱: net_assassin@hotmail.com 期待着与志同道合的朋友们相互交流


我们在大多数动作和街机游戏中看到的背景移动效果使用的是基于图片单元的卷动。虽然这种技术已经出现有几十年了,但它仍旧被用来渲染背景,而这类2D游戏当今仍旧频繁活跃着。回到那些老时光,当时计算机内存极为有限,使用基于图片单元的卷动方式是因为它极为高效。

本章主要介绍创建卷动背景的两种不同方法:基于位图和基于图片单元的。

卷动

卷动是什么?在今天的游戏世界中,3D是每个人的关注点,从来没听说过卷动的游戏者和程序员大有人在。实在是遗憾啊!就算不被理解或欣赏,但现代游戏又长又迷人的历史传承,在今天仍旧有价值。

卷动是一种在屏幕窗口中显示大的虚拟游戏世界的一小部分,然后通过移动窗口中的视图来表现游戏世界内位置变化的过程。

  1. 我们可以在虚拟游戏世界中显示一个巨大的位图图像来表示游戏的当前这一关,然后将该虚拟世界的一部分复制(位传输)到屏幕上。只是最简单的卷动形式。
  2. 另外一种方法是使用图片单元来创建游戏世界,很快就会讲解这种方法。

从图片单元创建背景

卷动背景的真实力量来自名为铺砌(tiling)的技术。铺砌是这么一个过程,其中没有真正的背景,而是由图片单元阵列形成要显示的背景。换言之,这是个虚拟的虚拟背景,与完全位图型的背景相比,只需非常少的内存。

基于图片单元的卷动项目




在这里向大家推荐一款特别棒(免费)的图片单元编辑程序 Mappy。

基于位图的卷动

使用Direct3D表面对象完成背景卷动还有一种方法,使用全位图卷动。它需要进行一些非常复杂的编程来生成一种算法,实现将单个位图卷绕到卷动窗口中而无需使用图片单元。这样代码不仅会变得复杂,而且使用图片卷绕来渲染基于位图的卷动器也比较慢。

基于位图的卷动理论

为了让基于位图的卷动尽可能高效地执行,建议让源图片保持和屏幕一样的尺寸。这样也许会使卷动器不能和支持任何分辨率的卷动器一样通用,但如果真的需要这种通用性,走这条路也不困难(需要牺牲一些性能,因为需要将结果的卷动缓冲区缩放到屏幕上)。
那么,对于初学者,要做的就是确认源位图与屏幕尺寸相同。然后,必须要做的是创建一个更大的卷动缓冲区,其大小为源图像的4倍。这可以通过在内存中创建一个大的Direct3D表面来实现,然后将源图像粘贴到卷动缓冲区的四个角。这会占用大量内存,但可以以任何方向卷动!

执行这种类型的卷动包括这些主要步骤:
  1. 装载卷动器所有的源位图
  2. 创建源位图4倍尺寸的卷动缓冲区
  3. 将源位图复制到卷动缓冲区的四个角
  4. 渲染卷动缓冲区中与卷动位置有关的部分
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics