游戏开发中常见碰撞方法对比及分析
2014-10-21熊亚蒙
摘 要:在开发基于ActionScript3语言的FLASH游戏的过程中,开发者经常会处理游戏中各种对象的碰撞及其相应的处理,选用适当的碰撞检测方法或优化自带检测方法是优化Flash游戏和RIA应用程序中至关重要的环节。本文详细比较flash游戏中几种常用碰撞检测方法,对各方法的优劣势进行对比。
关键词:FLASH游戏;碰撞
中图分类号:G718.5
当前,flash小游戏十分盛行,小巧的游戏内容,精美的游戏画面,较短的游戏时间,吸引着众多的玩家。游戏的碰撞检测已经成为FLASH游戏影响游戏流畅度和用户体验的一个瓶颈。
Flash游戏中常用的碰撞检测方法包括:FLASH自带的hittestobject方法、像素级位图检测、基于距离的检测和网格检测四种方法。
1 hittestobject方法检测
在简单的FLASH游戏中这种检测方法是应用最多的,同时其应用也是最简单的。假设有两个对象分别为mc1和mc2,通过hittestobject方法检测代码如下:
if(mc1.Hittestobject(mc2))
{相撞处理代码}
else
{沒有发生碰撞的处理代码}
但其有致命的缺陷即元件的边界为最小能包含元件的矩形的四个边为其边界,当元件为矩形时边界为实际边界,但当元件为非矩形是方法默认边界与实际边界不符,碰撞检测不准确,会有误报,如:
图1 圆和矩形没有实际碰撞,但hittestobject方法会误报碰撞发生
因此当需检测对象有一个非矩形时此检测方法误报可能性非常大,需慎用。
2 基于像素级碰撞检测
上图中误报的情况是检测方法的设计的问题,但FLASH中提供了像素检测碰撞可解决此类问题。基于像素的碰撞检测,检测过程中并不依靠元件的边界,而以元件所占据的实际像素为形状进行检测,提取形状所包括的所有像素的坐标,判断是否有重叠,固可提高准确度,因为其采用数学计算的方法,所以实际检测效率高于第一种检测方法。……