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

Android菜鸟日记

32-游戏中的碰撞

一、矩形与矩形的碰撞

 

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

既

四种情况

如图:

         口1

口2 口    口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)a的b次方

 

三、圆形与矩形的碰撞

 

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

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

检测X轴圆心到矩中心的距离是否小于半径+矩形Y轴1/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

 

半导体工艺仿真:离子注入工艺仿真_(8).损伤和缺陷仿真 离子注入工艺在半导体制造中是一个重要的步骤,用于在半导体材料中引入特定的掺杂剂。然而,离子注入过程中不可避免地会产生损伤和缺陷,这些损伤和缺陷会直接影响器件的性能和可靠性。因此,对离子注入工艺中的损伤和缺陷进行仿真研究是必不可少的。本节将详细介绍如何使用仿真软件对离子注入过程中的损伤和缺陷进行建模和分析。 阅读详情

相关推荐

实测有效!易灵思FPGA工程如何正确配置Efinity+Modelsim仿真环境

本文详细介绍了易灵思FPGA工程中如何高效配置Efinity与Modelsim联合仿真环境,包括软件版本匹配、系统环境变量设置、工程文件结构优化及仿真脚本深度优化等实战经验。通过实测数据验证,该方案可显著提升仿真效率,适用于不同规模的设计验证,帮助工程师快速搭建稳定高效的联仿环境。

m2n3b4v5c6的博客 404

android 碰撞函数,Android中两个对象的碰撞检测

我已经发布了一个关于此主题的问题..但没有得到答案。我正在做一个游戏。在那个应用程序中,我必须检测画布中两个对象的碰撞。对象类粘贴在这里。Android中两个对象的碰撞检测public class Droid {private Bitmap bitmap; // the actual bitmapprivate int x; // the X coordinateprivate int y; ...

weixin_39941721的博客 356

RK3588零拷贝视频流水线实战:用GStreamer+Mpp实现8K硬解与DRM显示

本文深入探讨了在RK3588平台上构建零拷贝视频流水线的工程实践。通过结合GStreamer与MPP,实现了从8K视频硬解到DRM显示的全流程硬件加速,有效解决了高分辨率视频处理中的DDR带宽瓶颈问题。文章详细解析了dma-buf数据流机制、管道构建与性能优化策略,为多路视频并发处理提供了高效的系统架构解决方案。

github5actions的博客 1165

Android游戏开发十日通(4)-行走,跳跃,碰撞检测

提要 经过前面的三篇文章,我们已经对libgdx有了一定的了解,并且搭建了一个简单的游戏场景,下面我们就继续在之前场景上添加更多的元素。 今天要实现的是精灵的行走、跳跃动画,还有碰撞检测。 行走 今天要实现的东西都是基于物理和数学的原理,首先我们来分析一下行走。 游戏中的动画都是帧动画,比如对Bob的行走一步的动画分解: 当这个序列连续播放...

weixin_34162401的博客 291

告别手动拖拽!PyQt5/PyQt6 QTableView列宽自适应窗口的三种实战方案(附性能对比)

本文详细介绍了PyQt5/PyQt6中QTableView列宽自适应窗口的三种实战方案,包括Stretch模式、resizeEvent手动计算和ResizeToContents模式,并附有性能对比。帮助开发者解决窗口大小变化时列宽不变的常见问题,提升用户体验和开发效率。

weixin_42538752的博客 232

达梦数据库连接报错6001网络通信异常

本文主要记录客户端连接达梦数据库报错6001网络通信异常问题分析过程、问题原因以及问题解决方法。

chen_zizi2025的博客 2768

Android游戏中的碰撞检测

一、矩形与矩形的碰撞 用反向思维,除了不碰撞的都是碰撞的。 既 四种情况 如图: 口1 口2口口3 口4 红色表示相对应的矩形 则有x1 y1 w1 h1 X2 y2 w2 h2 1的情况 y2 <y1&& y2 <y1- h2 2的...

weixin_30339969的博客 160

10、犹豫双模糊TOPSIS算法:原理与实例解析

本文介绍了犹豫双模糊TOPSIS算法的基本原理与应用步骤,结合中国四家纺织公司的案例,详细解析了从构建犹豫双模糊决策矩阵、归一化处理、专家信息聚合,到确定正负理想解、计算距离与相对贴近度系数的完整决策流程。该方法有效应对决策者在评价过程中的犹豫性,适用于财务评估、项目选择等复杂多属性决策场景,具有较强的实用性和推广价值。

yhn45678901的博客 122

iOS 多语言本地化教程,VS Code KXApp 编辑 String Catalog .xcstrings

做 iOS 多语言本地化总要在 VS Code 和 Xcode 之间来回切?这篇讲用 KXApp(快蝎)在 VS Code 里直接编辑 String Catalog(.xcstrings):双击打开和 Xcode 一样的表格,`.xcstrings` 与老的 `.strings`、`.stringsdict` 同表编辑,加语言同步登记到工程、从源码扫描同步新 key,复数、设备变体和变量占位都在表里处理,改源语言文本后已有翻译自动标需复核。文件仍是标准格式,回 Xcode 打开一致。

2501_91592143的博客 157

破局KS滑块验证码:从参数加密到轨迹生成,Python逆向全流程避坑实录

快手滑块验证码破解实战:从逆向分析到自动化实现 摘要:本文详细记录了破解快手滑块验证码(KS滑块)的完整过程。通过48小时的逆向分析,揭示了KS滑块的双重校验机制:不仅需要精准定位滑块缺口位置,还需满足参数加密和轨迹特征校验。文章从反爬逻辑分析入手,介绍了工具选型与环境配置的避坑要点,重点讲解了滑块缺口距离计算方法和核心加密参数slide_sign的逆向过程。通过OpenCV边缘检测和Frida动态调试技术,成功实现了滑块验证的自动化,准确率提升至99%。文中附有Python实现代码和实际操作踩坑记录,为开

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1662

74.9008深度刷机原理|高通QPST/Firehose底层刷写协议详解

移动设备刷机与底层维修技术指南 本文为移动设备维修人员和高级玩家提供全面的刷机与底层维修技术指南,涵盖高通、联发科和苹果A系列芯片的主要操作。 主要内容 核心操作:Bootloader解锁、Fastboot刷写、EDL深度修复、iTunes DFU模式恢复和分区表重建 适用场景:系统故障修复、底层损坏恢复、安全限制解除、系统降级和深度硬件维修 关键技术:详细解析刷机协议栈层级、关键分区作用和刷机安全机制 操作步骤: 环境搭建与驱动安装 Bootloader解锁(以小米为例) 高通机型系统刷写 苹果设备DFU

2601_95651806的博客 205

成为全栈·基础补充·Nginx 入门:反向代理与静态托管

Nginx 可以托管前端静态文件,也可以作为反向代理把 HTTPS 请求转给内部 API。本文从请求路径讲起,解释反向代理、静态目录、代理头、路径拼接、可信 IP、Cookie、上传体积、超时和缓存边界,并提供配置结构示例和逐层排查顺序。配置片段需要结合实际证书、路由和运行平台验证,不能直接复制为生产方案。

FungLeo's Blog 289

出现 Error occurred during initialization of VMagent library failed Agent OnLoad 解决方法

ntelliJ IDEA启动时出现"Agent library failed to load"错误,主要原因是JVM代理加载失败。解决方法包括:1)完全卸载并删除用户目录下的JetBrains配置文件;2)检查并修改idea64.exe.vmoptions文件,确保路径正确并删除不必要的-javaagent参数;

码农研究僧的博客 2481

Android 开发入门实践(二):Kotlin 空安全,从可空类型到安全访问

延续 NewsApp 项目中的新闻标题练习,记录 Kotlin 安全调用。

Easyhood的博客 276

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Android Message源码阅读

本文梳理了Android Handler机制中Message的核心设计:链表结构、消息复用池(sPool)及回收机制,重点解析了异步消息与同步屏障(SyncBarrier)的协同机制。当主线程需优先处理UI绘制等高优先级任务时,系统通过postSyncBarrier插入屏障,使Looper跳过普通同步消息,优先执行标记为异步的UI渲染任务,确保帧率流畅。该机制是保障Android界面响应性的关键技术之一。

u012116089的博客 183

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

指纹浏览器手机版能用吗?区分原生 App、移动网页模拟与云手机

本文说明“指纹浏览器手机版”可能指手机原生 App、远程云端浏览器、电脑模拟手机网页或云手机。通过对比运行位置与可完成的任务,提供下载前的四项核对方法,帮助读者选择适合网页操作或 Android App 的方案。

2601_96176203的博客 134

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Android 面试题逐题简析:28 个专题,232 题

常见原因是未在 onMeasure 处理 AT_MOST 下的期望尺寸,沿用了默认测量而占满可用区域,或未考虑内容、padding 和最小尺寸。应计算 desiredWidth/Height,再通过 resolveSizeAndState 等与父约束合并。wrap_content 是测量输入,框架不会自动知道自定义内容想要多大。

一个踩这七色彩虹的路人甲 151

云手机私有化部署完整方案:基于ARM服务器搭建私有安卓云集群

ARM 服务器是私有化安卓云集群最优硬件底座,原生架构匹配 Android,高密度、低损耗,非常适合企业内网场景。整套私有化方案的核心,从来不是 “跑起来安卓”,而是隔离可控、可审计、可运维、可扩容。两条路线各有取舍:开源自建灵活、门槛高;商用私有化交付开箱即用、安全能力完备,是当前企业生产环境主流方案。六边云手机私有化方案,补齐了自建方案在驱动适配、管控平台、审计合规、信创适配上的短板,适合对数据主权、内网隔离有强需求的政企、自研 App、垂直行业客户。

a598652的博客 308

Android 开发入门实践(九):把新闻数据与页面状态交给 ViewModel

本文记录第110—117课学习成果:将页面标题、新闻列表及选中编号逐步迁移至NewsViewModel,通过ViewModelProvider获取实例并读取数据。页面调用ViewModel方法处理选择与返回,实现状态管理解耦。过程中纠正了对Activity重建机制的误解,并厘清mutableStateOf的可观察性与ViewModel对象生命周期的区别,深化了对Compose状态更新机制的理解。

Easyhood的博客 203

Android 17 全栈性能分析关键字与源码手册

FrameTimeline 找异常帧,ATrace 找阶段,thread_state 找等待类型,ftrace 找内核原因,Simpleperf 找 CPU 热点,驱动源码找最终触发条件;任何根因结论都必须回到同一对象、同一时间窗口和同一条依赖链。

weixin_43228946的博客 362

智叟云集-手机证据抓取系统的工程结构与应用入口

本文系统阐述手机证据抓取系统的工程结构与应用入口,涵盖四大层面:工程目录划分(Android、Python服务、Web页面、测试与构建工具);Android组件通过Manifest声明可启动页面,主界面由MainActivity管理;Python服务通过run.py解析参数并启动FastAPI应用,支持远程访问;浏览器页面采用HTML/CSS/JS分离架构,静态资源通过路径关联,实现动态交互。各模块分工明确,协同构建可运行的采集系统。

2301_77178996的博客 229

Android 系统启动与调试中的日志抓取方式全解析

│ 用户操作/系统事件 ││ │▼ ▼│ (驱动/硬件/内存管理) │ │ (App/SystemServer) ││ │ │ ││ │▼ ▼│ dmesg 命令 │ │ logd daemon ││ cat /proc/kmsg │ │ (分类存储到分区) ││ │▼ ▼│ 串口 UART │ │ logcat 命令 ││ (硬件直连,最早输出) │ │ adb logcat ││ │▼│ (汇总所有日志+系统状态) │工具最佳用途关键优势主要局限dmesg。

zhaoshuzhaoshu的专栏 256

【Android】听写播放器改版:中英文书写速度拆项与「正在读」高亮

现象:把播放页主体抽成后,里面给LazyColumn加想让它占满剩余高度,编译报错(weight 不可用)。原因weight不是通用修饰符,是RowScope的扩展函数。是个普通函数,函数体里没有接收者,自然调不到。解决private fun ColumnScope.PlaybackBody(...) { /* 这里就能用 Modifier.weight(1f) */ }调用处仍在原来的Column { }里,无需改动。预防:Compose 的布局修饰符都是作用域绑定。

木头大左的博客 220

成为全栈·基础补充·Node.js 运行时:事件循环与异步

Node.js 如何在一个主 JavaScript 执行线程上处理大量网络请求?本文解释同步阻塞、异步 I/O、事件循环、Promise 微任务、libuv 线程池和 CPU 并行的区别,并说明 async/await 不会自动开启线程。文章还介绍异步错误、超时、取消、性能诊断和 Worker Threads 的适用边界,最后与 Go goroutine 做概念对照。

FungLeo's Blog 271

我开源了一个家庭备份工具:把手机照片和视频,存回自己的电脑

lw.HomeNAS是一款面向家庭局域网的私有备份工具,支持Windows电脑与Android手机间安全、断点续传的文件备份。通过网页端管理与手机端选择,实现照片、视频及文档的高效上传、预览与图集整理,具备完整性校验、任务持久化和多图集复用功能。完整部署包与源码开源,无需复杂配置,几步即可启动,适合个人及家庭数据长期保存与便捷管理。

.NET 人工智能实践 269

【Android】从零实现「报听写」功能:TTS 节奏引擎、拍照校验与错字库的纯端上闭环

指标口径为什么这么定今日/累计听写字数,按会话startedAt归日跨零点会话整轮算开始那天,不做轮内拆分(拆分需要在播放中持续落库,收益极低)听写正确率已校验写对字数 / 已校验字数只统计的会话。听完没校验的会话如果进分母,会被算成 0 分正确答案——数据会直接失真掌握进度已掌握 / 错字库总规模与错字库页的"已掌握 M / 共 N"同一口径是否有数据答题数 > 0或听写非空只看答题数会让"只做听写"的用户看到空态(坑 6)维度结果测试。

木头大左的博客 205
上一篇: Android菜鸟日记31-selector 中使用 shape
下一篇: [转]android 几何图形的绘制
iPoolo
博客等级 码龄17年 2粉丝 168原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值