当前位置: 首页 > 面试题库 >

盒子碰撞检测和弹跳

夏俊人
2023-03-14
问题内容

我正在打乒乓球,发现很难编写一种算法来正确地使球从四壁弹回(我将在稍后处理得分,因为只有西+东双方会成为进球)。所以此刻,我希望球在盒子周围弹跳。

检测球是否撞到墙壁很容易,但是我在计算新角度时遇到了麻烦。

到目前为止,这是我想出的:

        if(dstY == 0) {
            // North wall
            if(angle < 90) {
                newAngle = angle + 90;
            } else {
                newAngle = angle - 90;
            }
        } else if(dstX == maxWidth) {
            // East wall
            if(angle < 90) {
                newAngle = angle + 270;
            } else {
                newAngle = angle + 90;
            }
        } else if(dstY == maxHeight) {
            // South wall
            newAngle = angle + 90;
        } else if(dstX == 1) {
            // West wall
            if(angle < 270) {
                newAngle = angle - 90;
            } else {
                newAngle = angle - 270;
            }
        }

这仅适用于大约一半的碰撞,并且看起来非常难看。我确信这应该非常简单,并且之前已经做过很多次了。

在我的代码中,dstX / dstY是X / Y目标坐标。X = 0和y = 0在左上方。


问题答案:

您可以通过两种方式查看:

角度:如果您知道球碰撞的角度,只需执行180-角度即可找到新角度。

渐变:可能更简单。您必须每t毫秒以一定的dY和dX移动球。因此,如果您碰壁,则可以简单地玩dY和dX的倒置符号。例如,如果您撞到右墙,则dX变为-
dX,而dY继续前进。



 类似资料:
  • 我是Bullet新手,如果我的问题对你来说听起来微不足道,我提前道歉。 我需要从.stl文件加载一组凹三角形网格,并执行碰撞检测。用户可以移动对象。在用户手册中,我读到:“凹形三角形网格:对于静态世界环境,表示静态三角形网格的一种非常有效的方法是使用btBvhTriangleMeshShape。” 因此,我的问题是:Bullet可以检测使用BvhTriangleMeshShape建模的凹形网格对象

  • 我是cocos2d-x的新手,我正在xcode中使用cocos2d-x开发一个游戏。在我的游戏中,我增加了玩家精灵和障碍精灵。障碍精灵不断从右向左移动。现在我正在尝试添加两个精灵之间的碰撞。所以我使用了包围盒。以下是我的代码。但它不起作用。这是我第一次使用边框。 我在init()函数中创建了sprite,并在init函数中声明了上述代码。请帮我解决这个问题。

  • 碰撞检测 现在你知道了如何制造种类繁多的图形对象,但是你能用他们做什么?一个有趣的事情是利用它制作一个简单的 碰撞检测系统 。你可以用一个叫做:hitTestRectangle 的自定义的函数来检测两个矩形精灵是否接触。 hitTestRectangle(spriteOne, spriteTwo) 如果它们重叠, hitTestRectangle 会返回 true。你可以用 hitTestRect

  • 本节暂未进行完全的重写,错误可能会很多。如果可能的话,请对照原文进行阅读。如果有报告本节的错误,将会延迟至重写之后进行处理。 当试图判断两个物体之间是否有碰撞发生时,我们通常不使用物体本身的数据,因为这些物体常常会很复杂,这将导致碰撞检测变得很复杂。正因这一点,使用重叠在物体上的更简单的外形(通常有较简单明确的数学定义)来进行碰撞检测成为常用的方法。我们基于这些简单的外形来检测碰撞,这样代码会变得

  • 问题内容: 有人可以帮我了解JS中冲突检测的工作原理吗?我不能使用jQuery或gameQuery-已经使用了原型- 因此,我正在寻找非常简单的东西。不要求完整的解决方案,只需为我指明正确的方向。 假设有: 现在球正在移动(任何方向)。“ Someobject”(0-X)已经预先定义,其中有20-60个随机放置,如下所示: 我可以创建一个位置为“ someobject(X)”的数组,并在“球”移动

  • 我已经尝试添加冲突检测一段时间了,但似乎做不到... 要绘制地图,我只需使用x,y坐标: 使用这种方法,我想出了这种检测: 我一直在尝试使用for循环遍历树来检测玩家(一个矩形)是否穿过树,但我想不出任何东西。 我已经试过了 如果碰撞=true,player.update(碰撞)将矩形更改为红色,如果为false,将矩形变为黑色。 我已尝试使用for和if,例如: 等但这不起作用,它只适用于wit