javascript - HTML5 Canvas 碰撞检测 "globalCompositeOperation"性能

标签 javascript html canvas collision-detection jsperf

早上好

在过去的几个月里,我一直在修补 HTML5 Canvas API,并且从中获得了很多乐趣。

我逐渐创建了一些小游戏,纯粹是为了自学游戏开发的注意事项。我现在能够进行基本的碰撞检测,即圆圈和平台之间的碰撞(对于大多数人来说相当简单,但当你第一次让它工作时感觉是一个相当大的成就,当你理解什么时甚至更好实际上正在进行中)。我知道像素碰撞检测并不适用于所有游戏,因为在许多情况下,您可以使用上述方法获得足够好的结果,而这种方法显然在资源上非常昂贵。

但我只是灵机一动(很可能其他人已经想到了这一点,我正在深入研究这个领域,但我用谷歌搜索了一下,但一无所获)......所以这里......

是否可以使用/利用 Canvas 的“globalCompositeOperation”功能。我最初的想法是将它的方法设置为“异或”,然后检查 Canvas 上所有像素的透明度,如果发现一个像素,则必须发生碰撞。正确的?显然,在这一点上,您需要弄清楚所讨论的像素被哪些对象占用以及如何使用react,但对于其他技术,您必须这样做。

是说 Canvas 已经在幕后进行碰撞检测,以便计算形状何时重叠?是否可以在此基础上进行扩展?

有什么想法吗?

加里

最佳答案

Canvas 不会自动执行此操作(可能是因为它仍处于起步阶段)。 easeljs对鼠标进入/离开事件采用这种方法,但极度效率低下。我正在使用一种算法方法来确定界限。然后我用它来查看鼠标是在形状内部还是外部。理论上,要以这种方式实现命中检测,您所要做的就是获取两种形状的所有点,看看它们是否曾经处于另一种形状。如果您想查看我的一些代码,请告诉我

不过,我要说的是,虽然你的方法效率很低,但它是全局适用于任何形状的。

关于javascript - HTML5 Canvas 碰撞检测 "globalCompositeOperation"性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8848035/

相关文章:

javascript - javascript 项目和数组的问题(下雨)

javascript - 使用 AngularJS 和嵌套在数组中的数组中的 JSON 对象,如何将数据获取到 html 中?

javascript - 为什么执行串联后不调用complete?

javascript - 为什么子类型必须在子类型函数之外为其原型(prototype)分配一个父对象?

html - 在桌面设备上 Bootstrap 三列意外行为

javascript - 为什么CSS设置为 "max-height:0"后会出现这种情况?

python - Kivy - 使用从 Python 传递的值更新 Canvas 背景

javascript - Material-ui ToolbarTitle 失去了它的字体系列

javascript - 制作屏幕数字键盘

user-interface - Unity 3D 中的单个 Canvas 和多个面板与多个 Canvas