这是我正在为大学任务做的事情而且我很陌生,但我已经做了很多关于这个主题的阅读。请允许有人用最简单的术语解释如何做我正在尝试做的事情,这样我才能理解需要发生什么?
我有一个对象数组,每个对象在屏幕上绘制一个圆圈;我让他们在一个边界框内弹跳,但现在我希望他们碰撞。
我写了下面的方法,这是有效的...但只是。球偶尔会卡在一起并且彼此“抖动”,我不知道为什么会这样。另外,我想我正在检查更多的碰撞而不是必要的(?)。
void handleObjectCollision() {
for(int i = 0; i < _myBtns.length; i++) {
if(i != _id) {
float dx = _myBtns[i].x - x;
float dy = _myBtns[i].y - y;
float distance = sqrt(dx*dx + dy*dy);
if(distance < r * 2) {
xS = -xS;
yS = -yS;
// Debug
// println("Collision!");
}
}
}
我的课程和相关细分的完整粘贴可在此处找到:http://pastebin.com/eJawiHAE。
此外,这是我一直在做的一个例子,http://processing.org/learning/topics/bouncybubbles.html。
我试图实现一个简单的弹跳(速度反转?),没有添加物理或使用向量,因为我希望能够首先理解它最简单的形式。
谢谢。
答案 0 :(得分:4)
你不能只是反转你的物体移动的方向,因为碰撞可能几乎从它后面发生,在这种情况下,反转会使它再次碰撞碰撞与它碰撞的物体。这解释了你看到的抖动。您需要考虑碰撞发生的方向,并相应地调整方向向量,使用物理学中称为“弹性碰撞”的相关物理公式。