卡马克算法研究

游戏引擎作为游戏制作的基础是保证游戏质量的最重要部分,目前主要包括两方面:背景绘制和动画播放。背景绘制在游戏中的直接体现就是地图的绘制方法。目前开发人员用的最多的还是Tiled Background方法。什么是Tiled Background,其实向大家都玩过的拼图游戏一样的绘制方式,将一幅游戏场景图切成几乘几的矩形,在绘制的时候用双循环将矩形重新排列拼成我们游戏中需要的场景。为了使用尽量少的图绘制出尽量多的背景,背景图像由无数的等大小的图形组成,这些图形通常使用正方形。而这些图形的种类是有限的,只是每一个都可能被使用了很多次。就好像墙上的瓷砖一样,可以通过有限的种类拼出无限的组合。那么组成背景的图形就被称为Tile,而使用Tile 拼成的背景就被称为 Tiled Background。这样的做法其实在早期的游戏开发中已经有了很广泛的应用,包括gba等游戏的开发也是如此绘制地图。该方法的优点是可以节省内存占用,减少重复图素所带来的内存压力。绘制方法上有很多不同的算法。但卡马克算法还是其中最高效的算法之一。卡马克真是一个程序的传奇开发者啊。他将地图缓冲起来,将缓冲分成4个部分,分别对应绘制在屏幕上来减少地图绘制次数从而提高游戏绘制效率。当然随之而来的一个问题是缓冲会占用一个屏幕大小图片的所占用的内存。该方法的绘制方式是:假如地图向右下移动也就是屏幕向左上移动,这时最上和最左的二排图块已经超出屏幕可视范围也就是不需要的图块。我们就用最新的最下的图块更新这个缓冲的最上的一排图块,用最新的最右的一排图块来更新该缓冲的最左一排图块。然后将屏幕缓冲按十字分成4块,右下角的块是地图当前没有改变的块可以不用更新直接用缓冲偏移绘制在
屏幕的左上角位置,将缓冲中新更新后的最上部分图块绘制在当前屏幕最下位置,将最左新更新的图块绘制在屏幕最右位置将最新更新最左上角的部分绘制在最左下角这样就完成了屏幕的更新。我们在实际的代码编写中按以下的方式进行.根据上面的基本思想,把地图分为四个块(十字形的将buffer划分为四块),用KaMaKeX和KaMaKeY来记录十字分区的中心坐标(相对于buffer的坐标,我把这个点叫卡马克分区点).当地图向右移动的时候这时把卡马克分区点的坐标X方向加上一个tile的width,然后在从现在的卡马克分区点的坐标Y开始绘制提取出来的tileID对应的图象,注意是从当前的卡马克分区点的坐标Y开始绘制,当超出buffer Height时在从0开始绘制直到结束,这样就完成了在水平方向上的更新.还有就是在水平移动卡马克分区点的时候是在buffer中循环的,也就是从0到 buffer Width的一个循环过程,Y方向上完全一致.最后是绘制过程,也就是将四个分区绘制出来,口诀就是左变右上变下。一种简单的绘制方式是将地图缓冲分成3 块,不用更新的那块先绘制在屏幕上,需要更新的一个是水平方向的一排或是垂直方向的一排。那么将这两排更新后绘制在屏幕相应位置就可以了。具体位置计算是要用不需要更新的那个分区边界开始作为更新的起点到缓冲边界的循环绘制。动画播放也是和地图绘制方式差不多,就是把人物的各个动画帧拆开,用尽可能少的图素去拼出尽可能多的动画。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

游鱼_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值