碰撞检测算法在Java ME中的实现

开发 后端 算法
在Java ME开发中经常会碰到碰撞检测算法的实现问题,本文向您介绍两种实现碰撞检测算法的方法,包括矩形和矩形进行碰撞、圆形和圆形的碰撞。

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

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

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

1、矩形和矩形进行碰撞检测算法

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

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

  x方向:| (x1 + w1 / 2) – (x2 + w2/2) | < |(w1 + w2) / 2|
  y方向:| (y1 + h1 / 2) – (y2 + h2/2) | < |(h1 + h2) / 2|

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

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

下面介绍一下圆形碰撞。

2、圆形和圆形的碰撞检测算法

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

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

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

下面是数学表达式:

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

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

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

 

【编辑推荐】

  1. Java ME多模搜索技术初探
  2. 如何解决Java ME设备碎片问题
  3. J2ME中setClip方法的使用详解
  4. 用NetBeans平台开发J2ME游戏实例讲解
  5. 浅谈J2ME与JSP实现通信技巧
责任编辑:佚名 来源: IT168
相关推荐

2023-03-13 13:35:00

几何算法矩形碰撞检测

2022-12-26 07:37:14

四叉树Canvas

2020-10-18 07:15:53

Python异常检测算法开发

2013-06-17 09:12:31

Unity3D

2020-11-02 11:24:52

算法人脸识别技术

2017-09-20 16:25:00

深度学习视觉领域计算机

2018-09-17 15:30:05

机器学习密度异常值

2020-11-10 15:22:46

算法PythonIoU

2018-01-23 16:16:03

开源技术 Facebook

2023-11-13 22:17:54

YOLO-NAS目标检测

2020-12-24 19:01:14

iForest大数据检测算法

2023-07-14 07:15:13

2009-03-09 09:01:35

架构J2EESOA

2012-04-17 12:44:38

cocos2d-x

2022-03-07 10:04:09

机器学习训练模型

2020-11-02 13:44:35

算法数据科学Python

2021-07-24 11:23:41

算法开源技术

2017-09-12 16:57:43

机器学习K-means算法Python

2009-05-26 17:20:51

多线程J2METhread

2022-02-14 11:37:59

自动驾驶算法技术
点赞
收藏

51CTO技术栈公众号