像素完美的 Android 碰撞检测

2024-02-08

好的,我正在 Android 上开发一款游戏。我需要实现像素完美的碰撞检测。我已经在每个图像周围设置了边界框,每个边界框都经过变换以匹配图像的当前旋转。这一切都很好。我还将每个位图的像素数据存储在数组中。有人可以帮我找出检测像素是否重叠的最有效方法吗?预先感谢您的任何帮助!


基本思想是为每个对象创建一个位掩码,在每个像素中指示该对象是否实际存在。然后比较两个对象的位掩码的每个像素。

您可以通过计算两个边界框重叠的矩形区域来最小化需要检查的像素数量。该区域内的像素就是您需要检查的像素。

迭代所有这些像素,并检查像素是否填充在两个对象中。如果其中任何一个是,那么就会发生碰撞。

如果您的矩形与 x/y 轴对齐,要查找重叠,请查找重叠的左侧、右侧、顶部和底部。它看起来像这样(我可能搞砸了边缘情况,还没有尝试过这个):

int left = max(obj1.left, obj2.left)
int right = min(obj1.right, obj2.right)
int top = min(obj1.top, obj2.top)
int bottom = max(obj1.bottom, obj2.bottom)

for (int x = left; x < right; x++) {
  for (int y = top; y < bottom; y++) {
     if (obj1.isFilled(x,y) && obj2.isFilled(x,y)) {
        return true;
     }
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

像素完美的 Android 碰撞检测 的相关文章

随机推荐

  • 使用 spring 3.x 配置速度工具

    我对弹簧和速度都很陌生 我想使用 spring 3 x 配置速度工具 但我找不到相关的好文章 速度模板未显示会话变量 我从 Spring 控制器设置 至于在spring 3 x中配置Velocity工具 首先将tools xml文件放在有用
  • Java 新手,出现错误“int 无法取消引用”

    我是 java 新手 我已经从事这个练习有一段时间了 但不断收到错误 int 无法取消引用 我看到了几个类似的问题 但仍然无法弄清楚我自己的情况 这是完整的代码 package inclass class OneInt int n OneI
  • 如何在角度2中等待函数完成执行?

    下面是我的代码 我想要login and authenticated 等待的函数getProfile 函数来完成其执行 我尝试了多种方法 例如承诺等 但无法实现 请建议我解决方案 import Injectable from angular
  • 从服务器视频链接生成缩略图 android

    在android中是否可以获取某人的任何类型视频的缩略图 该人仅具有该视频的url链接 并且视频可以来自任何来源 例如youtube或任何来源 请告诉我是否可能 这是我的我试图通过java代码获取youtube视频的缩略图 public c
  • jQuery 延迟和承诺 - .then() 与 .done()

    我一直在阅读有关 jQuery deferreds 和 Promise 的内容 但我看不出使用之间的区别 then done 成功回调 我知道埃里克 海因兹 http www erichynds com jquery using defer
  • java.lang.NoSuchFieldError:android.support.v7.appcompat

    我将我的支持库从 r20 更新到了 r21 现在当我运行我的应用程序时 我收到此错误super onCreate我的主要活动 java lang NoSuchFieldError android support v7 appcompat R
  • iOS:将视图转换为圆柱形

    借助 Quartz 2D 我们可以改变对事物的看法x yand z axis 在某些情况下 我们甚至可以通过更改矩阵的值使它们看起来像 3D 我想知道是否可以将视图转换为圆柱体形状 如下图所示 请忽略气缸的顶部 我更好奇是否有可能扭曲UIV
  • Inno Setup:如何处理[UninstallDelete]部分的进度条?

    我使用 Inno Setup 为我的应用程序制作安装程序 当用户卸载应用程序时 我想删除其中的自定义文件夹Program Data文件夹 我的文件夹很大 大约15 GB 所以我使用 UninstallDelete 删除此文件夹的部分 Uni
  • 用于搜索引擎风格搜索的 JavaScript 库? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有一个 JavaScript 库可以确定字符串是否与搜索查询匹配 它应该高效并提供高级查询功能 如
  • 在 JSDoc 中记录开放式参数函数的正确方法

    假设您有如下内容 var someFunc function do something here with arguments 您如何正确记录该函数可以在 JSDoc 中接受任意数量的参数 这是我最好的猜测 但我不确定它是否正确 param
  • 当overflow-x:hidden存在时,overflow-y:visible不起作用[重复]

    这个问题在这里已经有答案了 在 Chrome 或 Firefox 中无法正常工作 有什么解决方法吗 h3 overflow y visible h3 with overflow x hidden div style width 100px
  • 在 PDO 准备好的语句中将值传递给 MySQL IN 操作?

    我有一个表单字段 它返回一个逗号分隔的字符串 我想将其传递给 PHP PDO MySQL 查询 IN 操作 但 IN 操作要求值以逗号分隔 而不是我的string的分隔值 我该怎么做呢 values POST values 10 5 4 3
  • 加特林 websocket 场景中的状态检查

    我有一个加特林场景 我订阅了一个 websocket 并想要检查传入消息的内部一致性 例如 通过 websocket 发送的消息是
  • Joomla 介绍图片作为阅读更多链接

    我想让 joomla 文章介绍图像的行为类似于阅读更多内容和标题链接 因此 用户单击图像 然后加载文章 我不是 PHP 专家 但也许这是阅读更多链接代码 a href class a
  • Google 地图显示“仅用于开发目的”

    当我尝试在网页中显示它时 Google 地图显示消息 仅用于开发目的 我怎样才能让这条消息消失呢 我的代码是这样的
  • 当所有测试在测试项目中运行时管理 Application.Current

    问题介绍 该网站上有几个关于应用 当前当测试的方法 函数包含 Dispatcher 使用时 为 null 问题 第一次我只使用了一个简单的解决方案 我刚刚创建了一个 getter 属性来创建一个new Application 以防止 应用
  • 在 C# 中创建列表的列表

    我似乎在理解 C 中通用列表的通用列表的想法时遇到了一些麻烦 我认为问题源于使用
  • 在 Java 中将 Element(org.w3c.dom) 转换为字符串

    我在将 Element 对象转换为 String 时遇到一个小问题 因为我需要将一个字符串传递给特定的方法 我尝试过使用 toString 或使用分配给它的字符串变量 没有一项试验是正确的 我们怎样才能轻松地进行转换 并且字符串对象还应该显
  • 阻止特定 DIV 的 UI Jquery 插件

    任何人都知道 BlockUI 的 JQuery 插件 它允许阻止特定的 DIV 而不仅仅是整个页面 谢谢 你可以通过blockui http jquery malsup com block element plugin
  • 像素完美的 Android 碰撞检测

    好的 我正在 Android 上开发一款游戏 我需要实现像素完美的碰撞检测 我已经在每个图像周围设置了边界框 每个边界框都经过变换以匹配图像的当前旋转 这一切都很好 我还将每个位图的像素数据存储在数组中 有人可以帮我找出检测像素是否重叠的最