Android游戏开发基础part7-碰撞检测
Android游戏开发基础--碰撞检测
在游戏当中碰撞无时不在,比如在射击游戏当中碰撞更是家常便饭,游戏主角在跟敌机发生碰撞,游戏主角跟敌机子弹发生碰撞,或者反过来敌机跟游戏主角发生碰撞,敌机更主角子弹发生碰撞等等。
一般我们都会有碰撞检测,发生碰撞时应该发生什么状况是我们需要设计的,比如主角的血量减少,或者敌机发生爆炸等等。只有通过碰撞的检测,我们才能进而触发相应的事件。
《Android游戏编程之从零开始》就介绍了三种最常用的检测碰撞的方式,分别是:矩形碰撞、圆形碰撞和像素碰撞。
首先是矩形碰撞:所谓矩形碰撞就是利用两个矩形之间的位置关系来进行判断,如果一个矩形的像素在另外一个矩形之中,或者之上都可以认为这两个矩形发生了碰撞。
其实两个矩形不发生碰撞的情况就只有四种,其他情况就是发生碰撞了
创建实例:RectCollion, 游戏框架为SurfaceView
项目效果图:
项目代码:
==>MySurfaceView.java
==>RectCollsionActivity.java
圆形碰撞:主要是利用两圆形的圆心距进行判定的;当两圆的圆心距小于两圆半径之和,判定发生了碰撞。
创建实例:CircleCollsoin
项目效果图:
==>MySurfaceView.java
像素碰撞:在游戏开发中是不推荐使用的,虽然它很精确,但是会造成代码的效率降低。因为有可以代替像素碰撞检测的方法:多矩形、多圆形的检测方式。下面进行介绍
多矩形碰撞:顾名思义就是设置多个矩形碰撞区域
下面创建一个实例:MoreRectCollsion项目
效果图:
==>MySurfaceView.java
多圆形碰撞跟多矩形碰撞是类似的,下面还有一种碰撞:Region碰撞,Region是一个类,这个类比较常用的方法就是用于判断一个点是否在矩形区域内,其方法是使是Regions类中的contains(int x, int y)函数
创建实例:RegionCollsion
项目运行效果:
==>MySurfaceView.java