日期:2014-05-20  浏览次数:20565 次

J2ME碰撞检测如何检测出碰撞位置
想做一个类似于打砖块或者乒乓球的那种游戏,

碰到的问题就是,当球碰到砖块的时候,首先砖块消失,(当然有的砖块需要碰2次才消失)然后球根据碰撞而发生速度的改

变。


问题来了:砖块有4个面,

1.假如球从下往上移动,碰到了砖块的下面,那么球的速度只需要对Y方向速度取反,X方向速度不变。

2.假如球从上往下移动,碰到了砖块的上面,那么球的速度也是一样,X方向不变,Y方向取反。

3.但是如果球撞到砖块的侧面,就是左右两面,速度改变则是,X方向取反,Y方向不变。

我的解决方案是:

当发生碰撞的时候,同时获取球的位置信息,然后跟砖块的位置进行对比,(通过球的X,Y坐标跟砖块的X,Y坐标就可以判读出

球碰撞的大概位置)。这时候就可以进行碰撞位置的检测,然后根据情况来改变速度。



但是这又有一个问题,就是当碰撞的时候,因为是像素级的检测,因此在通过坐标检测的时候,判断的位置不能采取精确的坐

标来匹配,至于碰撞发生的时候,两个图片到底重叠了多少这还是问题。好像很容易就能知道吧。。。。这里懒了一下。

------解决方案--------------------
重叠多少和你每个循环小球的移动距离有关。
移动距离越大,碰撞时重叠的部分就越多。

------解决方案--------------------
这种游戏 不是那么简单做碰撞的!
要用直线 法线 来计算的!
你这样做出来的 也不能有好的游戏体验的!
------解决方案--------------------
靠游戏自带的函数进行碰撞检测?
你说的是MIDP 2.0里的 精灵 带的?
你问问有哪个公司 出的游戏是用这个方法?
可以肯定地告诉你 没有这样的公司!

程序肯定都是基于算法的!
你用数学能解出这个问题 那么程序才可以解出来!
当然你可以考虑数学的难度和精度 而用一个比较视觉上像 的概念来解答这个问题
但最好是 数学+物理 这样的 手感和视觉效果才好!
------解决方案--------------------
球封装上圆心坐标和半径这两个属性,球移动就改变球心坐标,球的实时碰撞检测用上球心坐标和半径,这样就是要进行一个整圆的碰撞检测。有了这样的思路,再进行下一步的改进。
用变量标记球的运动方向,根据这个方向来确定一个角度。例如球直上运动,方向变量->角度->只检测圆的上半面(180度)。
这样的改进让原来的检测一个整圆变成了半圆,更进一步,还可以考虑,根据球的大小和砖的大小,在要进行碰撞检测的半圆上取关键点进行检测。
这只是个大致思路,希望对你有帮助。
------解决方案--------------------
砖宽w 高h, 球半径r, 这些都是常量.
砖心坐标(zx,zy) 球心坐标(qx,qy)

砖球有两个距离垂直距离dy=abs(zy-qy),水平距离dx=abs(zx-qx), 这两个是变量,每个刷新周期都要计算一次
如果dx<=r+w/2或者dy<=r+h/2为真表明碰撞成功,然后再判断前面两个逻辑哪个真,哪个假,来决定球的反弹方向.