`
119568242
  • 浏览: 426839 次
  • 性别: Icon_minigender_1
  • 来自: 深圳/湛江
社区版块
存档分类
最新评论

Android菜鸟日记32-游戏中的碰撞

 
阅读更多

Android菜鸟日记

32-游戏中的碰撞

一、矩形与矩形的碰撞

 

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

四种情况

如图:

         1

    3

         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

 

分享到:
评论

相关推荐

    Android菜鸟日记25-android反编译

    这篇“Android菜鸟日记25-android反编译”将带你走进Android反编译的世界,揭示APK背后的秘密。 首先,让我们了解什么是Android反编译。Android应用主要由Java语言编写,经过编译后生成Dalvik字节码(.dex文件),...

    菜鸟入侵--利用资源搜索动画教程

    菜鸟入侵--利用资源搜索动画教程,内附有详细的使用说明 菜鸟入侵之利用资源篇 菜鸟在入侵的时候,如果能充分利用现有的资源,那将对自己的入侵起很大的

    菜鸟到老鸟-教你玩转Mac操作系统

    菜鸟到老鸟-教你玩转Mac操作

    STM32菜鸟学习手册-罗嗦版

    STM32菜鸟学习手册-罗嗦版 。

    Android studio1.3.1从菜鸟到高手--第一季-视频-百度盘

    - **环境变量**:为了方便在命令行中使用,建议将Android SDK和Android Studio的bin目录添加到系统环境变量中。 - **插件安装**:根据项目需求安装必要的插件,比如Gradle、Git等。 - **首选项设置**:调整编辑器...

    android-emulator-webrtc

    android-emulator-webrtc 它包含一组React组件,可用于从浏览器与android模拟器进行交互。 它旨在与连接到正在运行的仿真器的一起使用。 有关如何运行可通过网络访问的仿真器的示例,请参见脚本。 npm install --...

    Android课程设计-菜鸟裹裹app源代码+文档说明.zip

    Android课程设计-计菜鸟裹裹app源代码+文档说明菜鸟裹裹主要包括1.支付宝快速登录2.支付宝注册3.手机淘宝登录,手机登录4.首页-校园认证5.首页-包裹搜索,首页-添加包裹6.首页-扫一扫7.首页-身份码8.首页-寄万物,寄...

    菜鸟学安卓 ----01之环境准备

    ### 知识点一:Android 开发环境搭建 #### 1.1 了解 Android 开发环境的基本构成 - **操作系统**:本教程基于 Windows 7 操作系统进行讲解。 - **JDK(Java Development Kit)**:安装 JDK 1.7 或更高版本,因为 ...

    职场菜鸟升职记----完整版

    在《职场菜鸟升职记》这部作品中,作者通过主人公的视角展现了作为一名职场新人所应有的态度。开篇即强调“我是菜鸟”的心态,这种心态不仅意味着对自身能力的认知和定位,更是一种积极向上、勇于学习的态度。它鼓励...

    android-json-0.0.20131108.vaadin1.jar

    android-json-0.0.20131108.vaadin1.jar

    菜鸟闯关-少儿编程scratch项目源代码文件案例素材.zip

    2. **角色控制**:角色的移动、旋转、碰撞检测等,是游戏中的基本操作。例如,“向前移动10步”、“如果碰到角色B,则执行...”等。 3. **条件语句**:如“如果...那么...否则...”用于设置游戏规则,例如,如果...

    手打从菜鸟到入门--电脑篇

    手打从菜鸟到入门--电脑篇 此文章推荐刚刚接触电脑的朋友们阅读,书籍会更新,属于网络文章,相信对大多数网友会有帮助!

    DelPhi7教程之菜鸟先飞版--帮你打通任督二脉(第1式).asp.rar

    《Delphi7教程之菜鸟先飞版--帮你打通任督二脉(第1式)》是一份专为初学者设计的教程,旨在帮助新手快速掌握Delphi7编程的基础知识和技巧。Delphi7是一款强大的Windows应用程序开发工具,以其高效的代码生成、直观的...

    菜鸟飞飞飞-微服务架构的想法

    菜鸟飞飞飞-微服务架构的想法

    CCNA菜鸟笔记640-802

    《CCNA菜鸟笔记640-802》是一份针对初学者的全面学习资源,包含两部分:《CCNA菜鸟笔记2007修正版》和《CCNA 640-802课程讲义》。这些文档旨在帮助读者理解和掌握Cisco Certified Network Associate(CCNA)认证考试...

    菜鸟学安卓 ---03之硬件运行环境搭建

    安装过程可能需要几分钟,完成后,设备管理器中应该会显示出已成功安装的Android设备驱动。 至此,硬件调试环境搭建完毕。你可以通过USB数据线将手机连接到电脑,开发环境中如Android Studio会自动识别设备。在确保...

    android 根据切水果的原理做的小游戏

    描述中的"自己根据切水果的原理做的小游戏 用某位大神做的刀光效果" 暗示开发者在实现游戏的过程中可能借鉴或使用了其他开发者制作的特效,如“刀光效果”,这是游戏中关键的视觉元素,能够增强玩家的沉浸感和游戏...

Global site tag (gtag.js) - Google Analytics