盒子碰撞检测和弹跳

2023-12-23

我正在制作乒乓球,并且发现编写一个将球正确地从四堵墙上弹开的算法真的很困难(稍后我将处理得分问题,因为只有西边和东边的一部分会进球)。所以现在我想让球在盒子周围弹跳。

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

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

        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 会继续前进。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

盒子碰撞检测和弹跳 的相关文章

随机推荐

  • 使用 Pyspark 时,您会从 Kryo 序列化器中受益吗?

    我读到 Kryo 序列化器在 Apache Spark 中使用时可以提供更快的序列化 不过 我通过 Python 使用 Spark 切换到 Kryo 序列化器后我还能获得显着的好处吗 Kryo不会造成重大影响PySpark因为它只是将数据存
  • Javascript slice 方法是否返回浅拷贝?

    在 Mozilla 开发人员翻译的韩语中 lan g 说 切片方法 返回浅复制的新数组 所以我测试了我的代码 var animals ant bison camel duck elephant var t animals slice 2 4
  • 从 XIB 文件按钮显示 ViewController - Swift

    有没有办法segue from a xib file 自定义 TableViewCell 到另一个视图控制器在 Main storyboard 中 不可能像在主故事板中那样拖动转场 在单元格中我有一个按钮 我想从那里更改视图 我该如何解决
  • 删除注释会提高代码性能吗? JavaScript

    从 JavaScript 代码中删除注释会提高性能吗 我意识到这不是很好的编程实践 因为注释构成了开发的固有部分 我只是想知道它们是否确实在编译过程中增加了一些开销 无论您是编译还是解释 JavaScript 编译器 解释器都需要查看该行
  • 链接器如何找到main函数?

    链接器如何在 x86 64 ELF 格式的可执行文件中找到 main 函数 一个非常通用的概述 链接器将地址分配给由符号标识的代码块main 正如它对目标文件中的所有符号所做的那样 实际上 它并不分配真实地址 而是分配相对于某个基址的地址
  • 以编程方式创建的按钮的 Onclicklistener

    我一直在寻找这个问题的答案 但似乎找不到 我有一个以编程方式创建的按钮 而不是在 xml 文件中 我希望在单击它时发生一些事情 显示警报或移动到另一个屏幕等 按钮代码 Button submitButton new Button this
  • 不带等号的 ASP.NET QueryString

    当我有一个像这样的网址时 http www mysite com MyTest http www mysite com MyTest MyTest 显示为请求对象的查询字符串中的键 如果我删除 符号 例如 http www mysite c
  • FxCop Phoenix 分析引擎出错

    因此 我尝试运行规则集中定义的一堆规则 RuleSet 文件实际上是使用 Sonarqube 生成的 我已经选择了其中的所有规则 包括 FxCop ReSharper 和 StyleCop 规则 我这样启动 FxCop C FxCop Fx
  • 如何防止春季日程重叠?

    Scheduled fixedDelay 5000 public void myJob Thread sleep 12000 如果上一个例程尚未完成 如何阻止此春季作业运行 默认情况下 spring使用单线程Executor 所以两个 Sc
  • C++ 中的 void 指针是什么? [复制]

    这个问题在这里已经有答案了 可能的重复 什么是void指针 什么是空指针 https stackoverflow com questions 4334831 what is a void pointer and what is a null
  • “[本机代码]”是什么意思?

    我尝试研究 jQuery 代码 所以我使用了这个 document write constructor jsfiddle http jsfiddle net WZGWp 我得到这个结果 function Function native co
  • Pytest 和动态夹具模块

    我正在使用 pytest 为可以在本地和云中运行的软件编写功能测试 我想创建 2 个模块 每个模块具有相同的模块 夹具名称 并让 pytest 加载其中之一 具体取决于我是在本地还是在云中运行测试 fixtures fixtures ini
  • React-select isMulti 选择所有过滤选项

    我需要在多选中添加 全选 选项 如果至少有 1 个过滤选项 则应显示它 单击 全选 应该仅添加过滤后的选项 不一定是所有选项 到已选择的选项 Input is empty so all options are filtered 单击 全选
  • 如何在 EF Core 中插入外键影子属性?

    EF Core 允许我们省略外键属性 因为导航属性的存在足以建立两个实体之间的关系 然后 EF Core 将创建所谓的外键影子属性 https learn microsoft com en us ef core modeling shado
  • 使用ajax和codeigniter在引导模式中提交表单,无需更改页面

    我正在尝试使用 ajax 在引导模式中提交表单 而且我的表单提交成功 但是ajax内的success语句没有执行 该页面被重定向到一个空白页面 显示 msg ok 我正在粘贴控制器和视图中的代码 请帮忙 控制器 update profile
  • 正则表达式中 \b 和 \B 之间的区别

    我正在读一本关于正则表达式的书 我遇到了这个例子 b 猫把食物撒得满屋子都是 使用正则表达式 bcat b将匹配该词cat但不是cat in scattered For B作者使用了以下例子 请输入九位数的 ID 出现在您的彩色编码密码上
  • Python 3 - 无法使用 re 库进行打印

    我有这个代码 import requests from bs4 import BeautifulSoup import re url http www rockefeller edu research areas summary php i
  • Opengl Es如何用于gpgpu实现

    我想使用 Opengl Es 进行图像处理代码的 gpgpu 实现 我想知道我可以使用 Opengl Es 来实现此目的吗 如果可以的话 哪个版本的 Opengl Es 将更适合此目的 Opengl Es 1 1 或 2 0 OpenGL
  • 如何设置“内容编码”以启用 Webpack 服务器的 gzip 文件

    我使用创建了一个角度通用的应用程序Webpack服务器 我已经用过 压缩 webpack 插件 来压缩我的 js html 文件 以便我可以将它们从服务器提供给浏览器 压缩文件是通过该插件正确创建的 问题 虽然浏览器显示它可以接受 gzip
  • 盒子碰撞检测和弹跳

    我正在制作乒乓球 并且发现编写一个将球正确地从四堵墙上弹开的算法真的很困难 稍后我将处理得分问题 因为只有西边和东边的一部分会进球 所以现在我想让球在盒子周围弹跳 检测球是否撞到墙壁很容易 但我在计算新角度时遇到困难 这是我到目前为止所想出