Android菜鸟日记

32-游戏中的碰撞

一、矩形与矩形的碰撞

用反向思维,除了不碰撞的都是碰撞的。

四种情况

如图:

1

23

4

红色表示相对应的矩形

x1 y1 w1 h1

X2 y2 w2 h2

1的情况

y2 <y1&& y2 <y1- h2

2的情况

x2 <x1&& x2 <x1- w2

3的情况

x2 >x1&& x2 >x1+ w1

4的情况

y2 >y1&& y2 >y1+ h1

二、圆形与圆形的碰撞

主要就是判断圆心距离

(Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2)) > r1 + r2)

Math.pow(double a,double b)ab次方

三、圆形与矩形的碰撞

第一种:就是圆形与矩形边框的碰撞检测

检测Y轴圆心到矩中心的距离是否小于半径+矩形X1/2

检测X轴圆心到矩中心的距离是否小于半径+矩形Y1/2

第二种:就是特殊的矩形四个角检测

四个矩形顶角到圆心的距离是否小于半径

四、多矩形的碰撞

把不规则图片看成多矩形然后检验碰撞。

下面是我自己封装的一个碰撞类

封装了上面几个加上

2组矩形数组内容之间检验是否碰撞的类


package com.lurencun.SurfaceUtil;import android.graphics.Rect;/** * 游戏碰撞检测类 *  * @author poolo * @version 1.00 */public class CollisionUtil {/** * 矩形碰撞检测 参数为x,y,width,height *  * @param x1 *            第一个矩形的x * @param y1 *            第一个矩形的y * @param w1 *            第一个矩形的w * @param h1 *            第一个矩形的h * @param x2 *            第二个矩形的x * @param y2 *            第二个矩形的y * @param w2 *            第二个矩形的w * @param h2 *            第二个矩形的h * @return 是否碰撞 */public boolean IsRectCollision(int x1, int y1, int w1, int h1, int x2,int y2, int w2, int h2) {if (x2 > x1 && x2 > x1 + w1) {return false;} else if (x2 < x1 && x2 < x1 - w2) {return false;} else if (y2 > y1 && y2 > y1 + h1) {return false;} else if (y2 < y1 && y2 < y1 - h2) {return false;} else {return true;}}/** * 矩形碰撞检测 参数为Rect对象 *  * @param r1 *            第一个Rect对象 * @param r2 *            第二个Rect对象 * @return 是否碰撞 */public boolean IsRectCollision(Rect r1, Rect r2) {return IsRectCollision(r1.left, r1.top, r1.right - r1.left, r1.bottom- r1.top, r2.left, r2.top, r2.right - r2.left, r2.bottom- r2.top);}/** * 圆形碰撞检测 *  * @param x1 *            第一个圆的圆心x * @param y1 *            第一个圆的圆心y * @param r1 *            第一个圆的半径 * @param x2 *            第二个圆的圆心x * @param y2 *            第二个圆的圆心y * @param r2 *            第二个圆的半径 * @return 是否碰撞 */public boolean IsCircleCollision(int x1, int y1, int r1, int x2, int y2,int r2) {// 两点距大于 2圆形半径距离if (Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2)) > r1 + r2) {return false;}return true;}/** * 圆形与矩形碰撞检测 *  * @param x1 *            第一个矩形的x * @param y1 *            第一个矩形的y * @param w1 *            第一个矩形的宽 * @param h1 *            第一个矩形的高 * @param x2 *            圆的圆心x * @param y2 *            圆的圆心y * @param r2 *            圆的半径r * @return 是否碰撞 */public boolean IsC2RCollision(int x1, int y1, int w1, int h1, int x2,int y2, int r2) {if ((Math.abs(x2 - (x1 + w1 / 2)) > w1 / 2 + r2)|| Math.abs(y2 - (y1 + h1 / 2)) > h1 / 2 + r2) {return false;}return true;}/** * 多矩形碰撞 *  * @param rArray1 * @param rArray2 * @return 是否碰撞 */public boolean IsRectsCollision(Rect[] rArray1, Rect[] rArray2) {for (Rect rt1 : rArray1) {for (Rect rt2 : rArray2) {if (IsRectCollision(rt1, rt2)) {return true;}}}return false;}}

2012-01-11

poolo

更多相关文章

  1. Android利用canvas画各种图形(点、直线、弧、圆、椭圆、文字、矩
  2. Android绘制一条边为弧形的矩形
  3. android百度地图半径画圆
  4. Android shape实现订单卡片制作(shape画半圆及矩形圆角、渐变、虚
  5. drawRoundRect方法:绘制圆角矩形
  6. Android上实现柱状图表 可实现边框矩形 没填充色
  7. 转:Android实现矩形设置菜单
  8. Android标准Glide加载圆形图和圆角矩形图
  9. Android画圆角矩形图片,并在图片上写字

随机推荐

  1. android布局属性详解
  2. 布局 遗忘 整理
  3. Android:res之selector背景选择器
  4. Android(安卓)Tutorial(3)Android(安卓)M
  5. Gradle sync failed: Could not GET 'htt
  6. android 加载图片到gallery
  7. 可点击价格走势图-贝塞尔曲线
  8. android布局属性详解
  9. android预定义样式简述
  10. Cordova 3.x 源码分析(6) -- cordova.js本