本期介绍游戏中经常要用到的碰撞,作为新手入门级碰撞介绍,我准备介绍利用Rectangle类实现碰撞,这个方法可以实现不是很精确的碰撞,但是如果用活了,基本可以满足大部分游戏碰撞的需求。
在starling中所有继承至DisplayObject的类,都拥有一个属性bounds,这个属性返回相对于父级坐标系的矩形区域,返回值的类型是Rectangle,而Rectangle类提供了contains()、containsPoint()这两个方法,都是判断矩形区域类是否包含某个点,下面看一下怎么用这两个方法的代码:
private function judgementCollision():void{
if(flood1.bounds.containsPoint(role.bounds.bottomRight)||flood1.bounds.contains(role.bounds.left,role.bounds.bottom))
{
rect=flood1.bounds;
isCollision=true;
return;
}
if(flood2.bounds.containsPoint(role.bounds.bottomRight)||flood2.bounds.contains(role.bounds.left,role.bounds.bottom))
{
rect=flood2.bounds;
isCollision=true;
return;
}
isCollision=false;
}
代码中两个if条件中正是判断flood1、flood2对象的矩形区域内是否包含role对象的右下角的点和左下角的点,效果如下图所示:
绿色代表role,土黄代表flood
中间有缝隙是因为图形有黑色线框,所以在黑色背景中看上去没有碰在一起,这种方法已经足够处理游戏中大多素碰撞了,看官们可以自己先思考,后面会介绍怎样将这个方法用活。