我被告知像素检测对于常规Windows游戏来说代价很高。对闪光灯来说这是一样的吗?或者与闪光灯提供的其他检测相比,像素检测更轻。 Flash具有getPixel32方法,可以轻松检测像素。如果我在玩游戏,那么使用getPixel32进行碰撞检测是明智的。或者我应该检查特定的瓷砖?
getPixel32是否仅限于它所在的显示对象?换句话说,无论显示列表中的图层是什么,我都可以检测到任何像素。
最后,我可能会自己解决这个问题,但我想首先要求我节省一些时间。但是,如果合理的话,是否有任何人有任何代码或良好的资源来解决这个问题。
答案 0 :(得分:3)
“Pixel perfect”检测成本很高。无论环境如何。
基本上它涉及首先进行快速检查以尽可能消除,然后逐个检查重叠像素。
如果你可以在不使用计数像素的情况下获得“足够好”的碰撞检测,那么就这样做。
答案 1 :(得分:3)
答案 2 :(得分:2)
检测碰撞像素完美 - 基于blitting完成它并不昂贵 对于大量的物体。您可以 see it here
- 醇>
在像素完美碰撞后处理反应 - 例如计算角度,>接近度等。 一个A proximity based reaction handling。 b Reaction handling to ball –ball interactions。
答案 3 :(得分:1)
在几乎任何环境中,我宁愿使用矩形和圆形等原语代替像素进行碰撞检测。你通常可以用这些原语构建一个合理的sprite表示,并获得真正的性能提升。
答案 4 :(得分:1)
为了建立在此处列出的想法,您确实可以使用圆作为边界对象,因为它们可以快速进行碰撞检测。
然后,如果检测到命中,则可以执行每像素检测。这样您就不必总是调用昂贵的每像素检测,但仍能确保每像素的准确性(如果您的游戏需要它)。
答案 5 :(得分:1)
我没有确凿的证据支持这一点,但闪存主要是矢量图形应用程序,因此,“像素完美”碰撞可以通过凹面碰撞算法计算(通常它们只是将其分解为一系列这意味着碰撞检测实际上可以非常快(与传统的“像素完美”方法相比)。
在实现我自己的flash渲染器时,这就是我处理碰撞检测的方式,因为我已经拥有的数据似乎是最自然的。编写许多专门的代码来做类似的事情(传统的像素完美方法)和不太准确的结果是没有意义的(你不希望它的表现不同只是因为你将它设置为较低的图像质量或放大/缩小。)
我的建议是,对最小规格的机器进行压力测试,如果速度不够快,则实施更快的版本(或者尝试实现某种加速结构,如四叉树)。