【问题标题】:Hit testing on many objects Flash AS3对许多对象进行命中测试 Flash AS3
【发布时间】:2011-11-24 18:17:32
【问题描述】:

我正在做一个模拟,其中涉及动态添加到舞台的粒子(很多圆圈)。当这些圆圈发生碰撞(实际上是动画剪辑)时,它们需要反弹(动量切换)。我对物理没有问题,但不知道如何有效地检查碰撞。归结为能够1)检查一个粒子是否正在碰撞,2)获取碰撞中涉及的其他粒子(对象)?

理想情况下,我希望粒子能够检查自己的碰撞并调整自己的动量,而不仅仅是在每一帧上运行一些丰富的 Render() 函数。这怎么可能?

提前致谢。

【问题讨论】:

    标签: flash actionscript-3 actionscript flash-cs5 hittest


    【解决方案1】:

    为了有效的碰撞检测,您需要使用一种叫做二叉树的东西。本质上,不是检查每个圆圈的每个像素与每个圆圈的每个像素,而是首先检查两个圆圈接触是否合理。这是通过反复将地图分成四等份来完成的。如果两个圆圈甚至不在屏幕的同一象限中,它们就不会接触。

    但是,实施起来很困难,除非您有意给自己一个挑战,否则请使用库,这样您就不会重新发明轮子。您可以使用物理引擎 Box2D 或游戏引擎 Flixel。

    【讨论】:

    • if(object.x+width > minX && object.x-width
    【解决方案2】:

    http://troygilbert.com/2009/08/pixel-perfect-collision-detection-revisited/

    这是一个提供像素完美碰撞检测的 as3 类的链接。网站上提供的下载链接。希望这会有所帮助。

    作者还链接到另一个解决方案:

    http://coreyoneil.com/portfolio/index.php?project=5

    【讨论】:

      【解决方案3】:

      如果您关心速度和优化,我建议您使用Box2D。有很多示例可供您入门,按照您的建议进行操作实际上非常简单。

      【讨论】:

      • 如果要使用库,这看起来是个不错的选择。
      • 我给你的提示,不要自己实现像物理行为和碰撞检测这样复杂的东西,依靠已经被大量开发人员使用、优化和调试的经过验证的、有效的优化库.此外,您可以在代码中包含库的源代码,您不需要使用 swc 或任何东西。
      • 如果我有合同等,我当然会按照你的建议去做,但是我只是想玩一下 flash(几天前安装),所以我故意从第一原则做事- 我不需要结果。
      【解决方案4】:

      如果您不想使用 Box2D,您仍然可以使用递归函数进行二分搜索并将搜索重复分成象限,直到您发现数组元素中的冲突或者您没有

      【讨论】:

        猜你喜欢
        • 2016-08-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-03
        • 2012-02-12
        • 1970-01-01
        相关资源
        最近更新 更多