惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

有赞技术团队
有赞技术团队
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
IT之家
IT之家
博客园 - 【当耐特】
罗磊的独立博客
Stack Overflow Blog
Stack Overflow Blog
MyScale Blog
MyScale Blog
WordPress大学
WordPress大学
The GitHub Blog
The GitHub Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Hugging Face - Blog
Hugging Face - Blog
I
InfoQ
B
Blog RSS Feed
腾讯CDC
云风的 BLOG
云风的 BLOG
N
Netflix TechBlog - Medium
Apple Machine Learning Research
Apple Machine Learning Research
GbyAI
GbyAI
雷峰网
雷峰网
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
D
DataBreaches.Net
The Cloudflare Blog
V
V2EX
S
SegmentFault 最新的问题

博客园 - 李现民

聚人才,戏天下,以为本 一些强大的Shell命令(转) Bash Shortcuts(转) Unity3d中BlinnPhong光照模型注解 扩展方法之二分查找 一次非典型的程序优化 各种箭头的unicode编码值 深度排序与alpha混合 SendMessage使用技巧 Unity3d基本优化策划 Destroy()方法的延时特性 如何使GameObject在超出Camera视野后自动销毁 避免在代码中直接使用delete关键字 告别cpp&h:hpp文件编写心得(转) 平台无关性多线程库-C++ Boost Thread 编程指南(转) BitBlt()双缓冲解决图象闪烁(转) 后缀数组(转) 2006百度笔试题 百度笔试题
J2ME中的基础碰撞检测算法
李现民 · 2008-07-27 · via 博客园 - 李现民

作者:陈跃峰

出自:http://blog.csdn.net/mailbomb

       在游戏中,经常需要进行碰撞检测的实现,例如判断前面是否有障碍以及判断子弹是否击中飞机,都是检测两个物体是否发生碰撞,然后根据检测的结果做出不同的处理。

       进行碰撞检测的物体可能有些的形状和复杂,这些需要进行组合碰撞检测,就是将复杂的物体处理成一个一个的基本形状的组合,然后分别进行不同的检测。

       下面简单介绍一下两种最基本的形状进行碰撞的时候进行的处理。

       1、矩形和矩形进行碰撞

   一般规则的物体碰撞都可以处理成矩形碰撞,实现的原理就是检测两个矩形是否重叠。我们假设矩形1的参数是:左上角的坐标是(x1,y1),宽度是w1,高度是h1;矩形2的参数是:左上角的坐标是(x2,y2),宽度是w2,高度是h2

       在检测时,数学上可以处理成比较中心点的坐标在xy方向上的距离和宽度的关系。即两个矩形中心点在x方向的距离的绝对值小于等于矩形宽度和的二分之一,同时y方向的距离的绝对值小于等于矩形高度和的二分之一。下面是数学表达式:

x方向:   | (x1 + w1 / 2) – (x2 + w2/2) | < |(w1 + w2) / 2|

y方向:   | (y1 + h1 / 2) – (y2 + h2/2) | < |(h1 + h2) / 2|

       在程序中,只需要将上面的条件转换成代码就可以实现了。

       但是矩形碰撞只是一种比较粗糙的碰撞检测方法,因为很多实际的物体可能不是一个规则的矩形。

       下面介绍一下圆形碰撞。

2、圆形和圆形的碰撞

       圆形和圆形的碰撞应该说是一种最简单的碰撞,因为在数学上对于两个圆形是否发生重叠,有计算两个圆心之间的距离的公式。那么条件就变为:计算两个圆心之间的距离是否小于两个圆的半径和。

       假设圆形1的左上角坐标是(x1,y1),半径是r1,圆形2的左上角的坐标是(x2,y2),半径是r2

       因为MIDP1.0中没有浮点数,而且浮点数的运算比较慢,所以我们将条件做一个简单的变换:对于条件的两边都进行平方,这样就去掉了开方的运算步骤。

       下面是数学表达式:

        (x1 – x2)2 + (y1 – y2)2 < (r1 + r2)2

       在程序中,只需要将上面的条件转换成代码就可以了。

       上面介绍的只是最基本的碰撞检测算法的实现,而实际的编程过程中遇到的碰撞检测问题要比这些复杂很多,还需要其他形式的检测,还需要进行更加深入的学习。

email:cqucyf@263.net