1)碰撞检测有两种常用方法:将所有物件两两测试,当物件数量少的时候,用这种方式既简单又快速; 基于网格检测,先将整个区域划分成格子,再基于格子检测,遍历所有格式,先检查本格中的所有物件,再将本格和相邻格中的物件一一检测,当物件数量多时,需要用这种方式进行检测,将大大减少检测数量;
2)划分格式时,应确保格子的尺寸比“最大的物件”尺寸还要大,必须能保证格式一定能将物件包住;
3)每个格子在检测时,只用检测“右边”、”左下边“、”下边“、”右下边“这四个格子就行,不用检测周边的八个格子;
4) 用一维数组来保存格子,通过在索引上做文章来识别它以属于第几行,这样能提高性能。
==========================================
private function checkGrid(): void
{
for(var i: int=0; i < _grid.length; i++)
{
for(var j: int=0; j < _grid[ i ].length; j++)
{
// 检测第一个格子内的对象间是否发生碰撞
checkOneCell(i, j);
checkTwoCells(i, j, i+1, j); // 右边的格子
checkTwoCells(i, j, i-1, j+1); // 左下角的格子
checkTwoCells(i, j, i, j+1); // 下边的格子
checkTwoCells(i, j, i+1, j+1); // 右下角的格子
}
}
}
private function checkOneCell(x: int, y: int): void