闪光像素碰撞检测

时间:2010-01-11 20:27:32

标签: flash actionscript-3 actionscript

我被告知像素检测对于常规Windows游戏来说代价很高。对闪光灯来说这是一样的吗?或者与闪光灯提供的其他检测相比,像素检测更轻。 Flash具有getPixel32方法,可以轻松检测像素。如果我在玩游戏,那么使用getPixel32进行碰撞检测是明智的。或者我应该检查特定的瓷砖?

getPixel32是否仅限于它所在的显示对象?换句话说,无论显示列表中的图层是什么,我都可以检测到任何像素。

最后,我可能会自己解决这个问题,但我想首先要求我节省一些时间。但是,如果合理的话,是否有任何人有任何代码或良好的资源来解决这个问题。

6 个答案:

答案 0 :(得分:3)

“Pixel perfect”检测成本很高。无论环境如何。

基本上它涉及首先进行快速检查以尽可能消除,然后逐个检查重叠像素。

如果你可以在不使用计数像素的情况下获得“足够好”的碰撞检测,那么就这样做。

答案 1 :(得分:3)

Corey oniel的CDK相当不错http://www.coreyoneil.com/portfolio/index.php?project=5。在他的网站中,您可以从示例中看到它可以很好地处理大量对象。 ave将它用于我的碰撞系统,它很好地处理了检测 我也很想在游戏中使用像素完美碰撞检测来使它们更逼真。其他像大多数的Flash游戏看起来非常糟糕的假拳。

答案 2 :(得分:2)

  1. Alan,我不得不反对,因为像素完美的碰撞检测并不昂贵,具体取决于您使用的方法。
  2. 授予peters传统的“像素完美”使用blitting实现良好,将远远优于像素完美“通过凹面碰撞算法计算的碰撞 您可以按照http://www.actionscript.org/forums/showthread.php3?p=959885#post959885
  3. 中的讨论进行操作
  4. 一般来说,根据您需要的位置处理像素完美碰撞检测时,这是基于所涉数学的两步过程
  5.   
        
    1. 检测碰撞像素完美 - 基于blitting完成它并不昂贵   对于大量的物体。您可以   see it here

    2.   
    3. 在像素完美碰撞后处理反应 - 例如计算角度,>接近度等。   一个A proximity based reaction handling。   b Reaction handling to ball –ball interactions

    4.   

答案 3 :(得分:1)

在几乎任何环境中,我宁愿使用矩形和圆形等原语代替像素进行碰撞检测。你通常可以用这些原语构建一个合理的sprite表示,并获得真正的性能提升。

答案 4 :(得分:1)

为了建立在此处列出的想法,您确实可以使用圆作为边界对象,因为它们可以快速进行碰撞检测。

然后,如果检测到命中,则可以执行每像素检测。这样您就不必总是调用昂贵的每像素检测,但仍能确保每像素的准确性(如果您的游戏需要它)。

答案 5 :(得分:1)

我没有确凿的证据支持这一点,但闪存主要是矢量图形应用程序,因此,“像素完美”碰撞可以通过凹面碰撞算法计算(通常它们只是将其分解为一系列这意味着碰撞检测实际上可以非常快(与传统的“像素完美”方法相比)。

在实现我自己的flash渲染器时,这就是我处理碰撞检测的方式,因为我已经拥有的数据似乎是最自然的。编写许多专门的代码来做类似的事情(传统的像素完美方法)和不太准确的结果是没有意义的(你不希望它的表现不同只是因为你将它设置为较低的图像质量或放大/缩小。)

我的建议是,对最小规格的机器进行压力测试,如果速度不够快,则实施更快的版本(或者尝试实现某种加速结构,如四叉树)。