卡马克卷轴算法的引入
上面的算法虽然在一定程度上解决了地图绘制的效率问题,但对于某些资源严重不足的手机,或者由于地图块比较小、循环次数过多的情况,仍然会造成画图时屏幕闪烁。因此,在这种情况下,仍然需要对上述算法做进一步的优化。
不论采用哪种优化算法,一个基本的思路就是尽量减少绘制的次数,从而减少对系统资源的消耗。卡马克卷轴算法就是这样算法的一个经典例子。
单方向卷轴
对于横版游戏来说,如果角色向右侧移动,则地图向左侧滚动。由于角色每次移动若干个步长,因此地图中新画出的区域宽度也为若干个像素,那么如果让系统重绘所有屏幕区域,很明显,大部分区域都是和上一屏幕区域相同的,如此造成成了资源的浪费。而卡马克算法的思路就是——如果上一次绘制过的地图也能够部分重用到本次地图绘制上来就好了。那么很容易想到在内存中建立一个和屏幕一样大或略大的缓冲区即可很好的完成这个设想。
由上图可以看到,区域B为相同的地图区域,这个区域在下一次屏幕重绘时,可以被重新利用。区域A是在下一次屏幕重绘中不被采用的区域,这区域应当被舍弃,但是如果稍微留意一下的话,不难发现区域A和区域C的面积大小其实居然是一样的。
那么如果建立一个和屏幕大小相同的缓冲,在其被舍弃掉的绘制区域A中画上新的区域C,再把区域B和区域C拼合到屏幕上,是不是就能达到减少系统资源消耗的目的了呢?卡马克卷轴的基本原理正是如此。
图显示了卡马克卷轴的最基本原理,首先在内存中建立一块和屏幕一样大小(或略大)的缓冲区。然后在本应由于地图移动而被舍弃掉的区域1上面绘制,由于地图滚动而出现的新地图区域。最后把两个区域按照地图的实际位置拼合到屏幕上。
双轴滚动的卡马克卷轴
对于俯视游戏,或者有Y轴卷动的游戏来说,单单一个方向的地图卷动并不够用。那么如果是出现两个方向的卷动会如何呢。不必担心,上面的思路算法一样能适应这种情况。
由上图可以看到,区域D为相同的地图区域,这个区域在下一次屏幕重绘时,可以被重新利用。区域ABC是在下一次屏幕重绘中不被采用的区域,可以在这个3个区域上绘制上下一次需要重绘的区域A’B’C’。再将绘制好的四个区域拼合到屏幕的对应位置。
上图显示了双轴滚动的卡马克卷轴的基本绘制原理,需要特别注意的是:在缓冲区的绘制顺序和在屏幕上拼合的顺序是完全相反的。
卡马克算法的实现
卡马克卷轴缓冲画法的一般步骤如下:
1. 初始化所有地图数据,并且全屏绘制初始的地图
2. 若人物移动,则调用摄像机算法,修正地图偏移量
3. 地图偏移量不满足地图的边界条件,就重绘缓冲区
4. 重绘缓冲区
5. 后台缓冲区的四个子区按照顺序画到屏幕上
摘自:http://bbs.chinaunix.net/thread-1669931-1-1.html
分享到:
相关推荐
卡马克算法android版本底层封装(使用android游戏开发中地图基于Title块的绘制)
《J2ME卡马克算法源码详解与学习指南》 在移动设备和嵌入式系统的开发中,Java 2 Micro Edition(J2ME)曾是主流平台之一,尤其在早期智能手机和平板电脑中广泛应用。卡马克算法,由著名游戏开发者约翰·卡马克提出...
卡马克算法,全称为“卡马克卷轴算法”(Carmack's scrolling algorithm),是由著名游戏程序员约翰·卡马克(John Carmack)所提出的一种在2D游戏中实现平滑滚动地图的技术。这种算法在80年代末90年代初的游戏开发...
**Flash卡马克算法详解** Flash卡马克算法,是由著名的游戏编程先驱约翰·卡马克(John Carmack)提出的一种高效图像处理技术。在Flash平台上,该算法被广泛应用于地图和图片的加载,以减少资源占用并优化内存管理...
卡马克缓冲算法,又称双缓冲技术,是游戏开发和图形编程中的一个重要概念,尤其在早期的移动设备如J2ME平台上的应用十分广泛。这个算法由著名的游戏开发者约翰·卡马克提出,它解决了屏幕更新时闪烁和不连续显示的...
而卡马克算法通过预计算和利用位图的缓存特性,显著减少了重绘区域,实现了平滑且高效的滚动效果。 在AS3中实现卡马克卷轴算法,首先需要理解屏幕更新机制。AS3有两种主要的屏幕刷新操作:自动渲染(enterFrame)和...
本文将深入探讨四种不同的开根号算法:二分法、牛顿迭代法、卡马克算法以及其他可能的方法。每种算法都有其独特的优缺点,适用于不同的场景。 首先,我们来看**二分法**(Binary Search Algorithm)。二分法是一种...
卡马克卷轴算法,源于著名游戏开发者约翰·卡马克,是一种高效处理2D游戏地图滚动的技术,特别适用于大型游戏世界中的水平或垂直滚动效果。在Android平台上,这种算法的应用可以帮助开发者优化游戏性能,减少资源...
1. "卡马克算法.rar" - 这个文件很可能包含了卡马克滚屏算法的详细解释和源代码实现。通过解压并阅读其中的内容,我们可以深入了解算法的细节,包括数据结构、循环优化和内存管理等方面。 2. "Carmark_Awu.rar" - ...
This is the complete source code for winquake, glquake, quakeworld, and glquakeworld. The projects have been tested with visual C++ 6.0, but masm is also required to build the assembly language ...
"卡马克卷轴算法研究_地图双缓冲" 卡马克卷轴算法是经典的地图缓冲绘制技术,广泛应用于移动游戏开发。该算法可以有效地改善在游戏中地图绘制中的屏幕闪耀、帧数过低等问题。 卡马克卷轴算法的关键思想是使用缓冲...
【卡马克卷轴算法】是地图滚动渲染的一种高效优化技术,尤其在资源有限的环境,如J2ME框架下的手机游戏中,它能显著提升游戏体验。卡马克卷轴算法通过利用缓冲区,解决了屏幕闪烁和帧率过低的问题,使得地图滚动更加...
arduino kalam滤波算法
对于单向卷轴游戏,如横向滚动游戏,卡马克算法利用内存缓冲区,保存已绘制的部分地图,仅重绘新出现的区域,避免重复绘制。缓冲区的大小与屏幕相同,旧的区域被新区域覆盖,然后将更新后的缓冲区内容合并到屏幕上,...
卡马克卷轴算法是针对J2ME框架下手机游戏开发中的地图滚动重绘问题提出的一种高效解决方案。在手机性能有限,尤其是CPU资源紧张,地图块尺寸较小的情况下,传统的地图绘制方法可能会导致屏幕闪烁和帧数过低,影响...
**卡马克缓冲算法** 卡马克缓冲算法,也称为双缓冲技术,是由著名游戏程序员约翰·卡马克(John Carmack)提出的一种图形渲染优化技术。在计算机图形学领域,尤其是在游戏开发中,它被广泛用于提高画面显示的平滑度...
卡马克卷轴算法是由著名游戏开发者约翰·卡马克提出的一种优化2D游戏滚动效果的算法。这个算法的核心思想是避免在屏幕滚动时重新绘制整个屏幕,而是只更新视口内的新区域和离开视口的旧区域。通过这种方法,可以显著...
Flash中实现卡马克卷轴算法.doc