AS3中实现卡马克卷轴算法 |
来源:9RIA.com天地会 作者:阿伍 2010年06月08日 15:43 网友评论:0条 点击:5210 |
大部分act游戏里都会用到地图卷轴,我目前正在做的也不例外。
老实说,我对flash的底层封装还是很信任的:它将繁杂的底层操作简单化了。譬如一张位图的滚动,不论这张图有多大,都应该会自动缓存、优化渲染。 不过当一个朋友和我说一个3000*600的位图以60fps滚动会占用掉10%以上的cpu时,我半信半疑。 但实际试验确实如此,我尝试各种办法降低消耗,比位图缓存、scrollRect、像素滚动(这个消耗简直要命…),最后想到卡马克算法。 我先是做了一个简单的demo,只有单向缓冲区,但实验结果很明显是降低了至少30%的cpu消耗。 于是我开始尝试进行完善和封装。 卡马克卷轴是世界顶级程序优化大师,以及游戏引擎开发领域的先行者 约翰·卡马克所创造的一种平滑卷轴算法。(此人和zun并列为我的偶像) 早在20多年前,电脑游戏的发展才刚刚起步。相比专门为游戏而生的电视游戏,电脑游戏在当时还非常“弱智”。 tv游戏里那些可以卷轴的游戏大大提高了用户的体验,当控制角色行走时,镜头会跟随主角,而地图会卷动以提供更为广阔的游戏场景,让玩家体验到一个连续的世界。超级马里奥就是这类游戏中的成功典范。 但在1990年,还没有人能在电脑上实现这样的效果,开发人员都用一些蹩脚的技巧来让玩家觉得游戏的世界比屏幕要大,譬如当玩家移动到屏幕最右边的时候,游戏会停顿一会,然后右边的场景出现在屏幕上。 主要是当时PC的性能还很差,而卡马克下定决心要找出一种办法来在PC上实现像超级马里奥那样的平滑卷轴效果。 最终他用了几天时间实现了,这个创新为以后的2d电脑游戏带来了新的可能。 回到正题: 卡马克算法的主要思想就是: 只更新屏幕变化的部分,从而节省渲染的消耗。
附上源码:Carmark_Awu.rar |