Java游戏中的碰撞检测?

2023-12-04

我正在开发一款游戏,其中存在运动图像碰撞检测的问题。游戏有一艘宇宙飞船和一些小行星(障碍物)。我想检测它们之间的碰撞。我怎样才能做到这一点?


对于矩形以外的任何物体,碰撞检测通常都很棘手。

我过去这样做的方法是为每个对象提供图像和蒙版。例如,像木星 2 号宇宙飞船这样的物体迷失在太空将具有以下图像和蒙版:

     X            00000100000
  XXXXXXX         00111111100
 X       X        01111111110
X         X       11111111111
 X       X        01111111110
  XXXXXXX         00111111100
    XXX           00001110000

The image是被发送到屏幕上的内容,但是mask是用于碰撞检测的。您会注意到掩码中的 1 基本上是图像的轮廓和内容。

检测碰撞的方式:

  • 检查矩形是否重叠。如果没有,就不会有碰撞的机会。
  • 否则创建一个由其蒙版组成的对象编号 1 的矩形。
  • 构造另一个由对象 2 的蒙版组成的矩形。
  • 矩形 2 与矩形 1 的重叠部分按位与。
  • 如果矩形 1 中还剩下 1 位,则发生冲突。

这考虑到了“未遂事件”,其中每个对象的边界矩形重叠,但对象本身不一定有轮廓。位运算符是检测这一点的有效方法。

这是一个箭头没有完全击中气球的例子 - 在我的图形设计技巧面前颤抖:

....xx....
..xx..xx..
.x......x.
.x......x.
x........x
x........x
.x......x.
.x......x.
..xx..xx..
....xx.**y.....
       .y......
       yyyyyyyy
       .y......
       ..y.....

您可以看到,即使矩形重叠(参见**y),箭头实际上并没有接触到气球。通过对掩码应用按位 AND 运算,这些位最终将为零,从而产生非冲突。


@kyoryu 在他的评论中提出了一个有趣的观点。有些游戏非常适合由较小的矩形组成的对象,您可以根据矩形组件简化碰撞检测(无需担心像素完美性)。例如,我们的老朋友太空侵略者(实际上是defender游戏中对抗太空入侵者的导弹)可能由两个矩形 X 和 Y 组成,而导弹则由 Z 制成:

    YYYY                .Z.
    YYYY                .Z.
XXXXXXXXXXXX            .Z.
XXXXXXXXXXXX            ZZZ
XXXXXXXXXXXX            .Z.
XXXXXXXXXXXX

这将归结为对导弹与两个太空入侵者矩形进行简单的矩形检查 - 考虑到导弹的大小,即使您接触其中一个,您也可以将其称为碰撞.角色(将它们视为近程导弹而不是撞击导弹)。

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

Java游戏中的碰撞检测? 的相关文章

随机推荐

  • 如何在Python中保存二维数组(列表)?

    我需要将表示游戏世界中的地图的二维数组保存到配置解析器中 数据如下 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 举个例子 我显然可以保存数据 但在读回数据后无法将其从字符串转换回列表 顺便说一句 我不介意是否必须使用 txt
  • 带有 templateUrl 和 ng-repeat 的自定义指令

    我已经研究这个问题几个小时了 终于我在 plunker 上复制了它 这是我的问题 当使用外部资源作为模板的自定义指令与 ng repeat 结合使用时 模型更改时视图无法正确渲染 在我的示例中 单击链接将替换模型 但旧数据尚未清除 如果我使
  • 将字符串列表与可用的字典/同义词库进行比较

    我有一个程序 C 它生成一个字符串列表 原始字符串的排列 大多数字符串是按预期随机分组的原始字母 即 etam aemt team 我想以编程方式找到列表中真正的英语单词的一个字符串 我需要一个同义词库 字典来查找和比较每个字符串 任何人都
  • 将 CSS/HTML 中的按钮与文本水平对齐一行?

    我想知道如何水平对齐按钮 最重要的是 我想向这些按钮添加文本 这就是我目前所拥有的 HTML 正文部分 div class tile div table class tile table tr td img class tile image
  • CSS 内部 id 选择器

    我在 CSS 文件中有以下 id 选择器 headerphoto 和 logo box 是 header id 的内部 id 选择器 我真的需要将这两个添加为内部 id 选择器吗 我可以将它们添加为普通的 id 选择器 这样做的最佳方法是什
  • 读取 Android 应用程序的 PKCS12/P12 客户端证书文件

    我正在尝试在我的 Android 应用程序中使用客户端证书 以便我可以确保仅与使用该应用程序或拥有该证书的人进行 HTTPS 通信 我的 res raw 文件夹中有证书 当我开始输入 R raw 时 Android Studio 就会看到它
  • 将缺失值替换为 n-1

    例如 我有 df pd DataFrame 0 420 np nan 455 np nan np nan np nan df 0 0 420 0 1 NaN 2 455 0 3 NaN 4 NaN 5 NaN 然后使用 df 0 isnul
  • 如何在多行中显示长文本的表视图节标题?

    我正在使用具有多个部分的表视图控制器 其中一些部分具有长文本 当我使用 titleForHeaderSection 时 如果文本长度超过表格视图框架 文本就会被截断 我想在下一行显示文本 而不是使用titleForHeaderInSecti
  • “星云”类不存在

    我在处理 3 3 时遇到问题 我刚刚开始开发一种星云模拟器 旨在模拟恒星从星云到红巨星的诞生和生命周期 到目前为止 我已经创建了两个类 Gas 针对每个单独的气体粒子 和 Nebula 指粒子的集合 我在编辑器中输入了以下代码 每次都得到相
  • 如何使用 Javascript 和 JQuery 操作 URL?

    我想制作一个包含大量 Javascript 交互的页面 但是 当用户浏览页面时 URL 也必须更改 因此 当用户共享 URL 或保存 URL 时 它可以引导他到达他的实际状态 我怎样才能做到这一点 例子 myapp com page1 my
  • 如何避免 DbgCommand 命令被写入日志文件

    我有一个恼人的问题Pykd pyd 我在脚本中使用它 启动了几个DbgCommand函数 例如 DbgCommand dt 0x000000eab8748430 CMap
  • C 语言中的正则表达式使用函数 regcomp 和 regexec 在第一个和第二个匹配之间切换

    我正在使用 Dev c IDE 编译我的 C WIN32 API 程序 我正在使用提供的正则表达式库http gnuwin32 sourceforge net packages regex htm 我正在使用此文档作为参考 上面的站点也提供
  • 我可以将表单设置为单例吗?

    我有一个 Visual C 2010 应用程序 它有一个名为MainWnd与其他工具窗口和对话框 我希望其他工具窗口能够与主窗体 对话 并调用其方法 但这需要一个实例MainWnd 并且由于在任何给定时间只会创建其中一种形式 因此没有理由我
  • 使用 matplotlib 计算 2 个椭圆的重叠区域

    有谁知道是否可以使用计算两个椭圆的重叠面积matplotlib patches Ellipse 我必须像这样省略 我想计算重叠面积与各个椭圆的面积之间的比率 仅使用这可能吗Ellipse from matplotlib patches 您无
  • 打开文件对话框在 Swift 中崩溃

    我想使用 NSFilemanager 中的打开文件对话框 但我的代码有时会崩溃 有时会工作 我不知道为什么 有时它可以 100 工作 有时窗口是空的 有时对话框后面的背景显示在窗口中 当发生崩溃时 Xcode 中会显示 signal SIG
  • akka-http 发送连续的分块 http 响应(流)

    我有这个粗略的测试示例akka http客户端和服务器 服务器 scala import akka actor ActorSystem import akka stream ActorMaterializer import akka str
  • 如何在选项标签中写入多种颜色的文本

    我有一个表单中的下拉列表 选择标签 其内容是城市名称 但我也想在他们旁边显示他们的国家名称作为评论 之间可以写文字吗
  • 调试目标丢失?

    当我尝试构建解决方案时 出现以下错误 Visual Studio 无法开始调试 因为缺少调试目标 c target 请构建项目并重试 或者适当设置 OutputPath 和 AssemblyName 属性以指向目标程序集的正确位置 我的输出
  • R 中的 h2o.predict 错误

    我在尝试使用 R 中的 h2o 创建深度学习预测时遇到错误 使用命令 h2o predict 进行的预测中约有三分之一会发生该错误 这是模型设置 localH2O h2o init ip localhost port 54321 start
  • Java游戏中的碰撞检测?

    我正在开发一款游戏 其中存在运动图像碰撞检测的问题 游戏有一艘宇宙飞船和一些小行星 障碍物 我想检测它们之间的碰撞 我怎样才能做到这一点 对于矩形以外的任何物体 碰撞检测通常都很棘手 我过去这样做的方法是为每个对象提供图像和蒙版 例如 像木