【发布时间】:2019-05-11 16:02:18
【问题描述】:
我的问题有两个部分,它们是相关的。我的界面上有一个奇怪的形状,如下图所示,我正在尝试在其边界内随机生成 MovieClip,但我很难找到一个好的方法。
问题 1:我可以运行 If 条件来检查 bitMapData.hitTest 以查看 MovieClip 是否在此形状内随机生成,如果它不是简单地使用一组新的随机数重试坐标。然而,有没有更好的方法?像只考虑形状内坐标的方法吗?一次会产生大量的 MC,所以我希望减轻负载,或者至少找到一种有效的方法来进行此计算。
问题 2:在此形状中生成的 MovieClip 最终将具有碰撞检测机制,当与之交互时会排斥自身。 有没有办法通过某种边界检测将它们包含在这个形状中?
如果它是一个正方形,我们可以很容易地通过快速检查所有 4 个边缘来包含它们,但对于这个形状则不行。目前我正在考虑再次使用 bitMapData.hitTest 来检测被击退后的越界,但是我怎么知道哪个 Point() 是这个形状最近的“边缘”以将 MC 返回到?
【问题讨论】:
-
我不是真正处理这些东西的游戏开发人员,但我认为您提出的检查位图数据命中的解决方案可能必须成为可行的方法(尽管我很感兴趣看看是否有人为您提供了更高效的解决方案)。
-
至于抓拍,那就更有趣了,我很好奇你会得到什么样的答案。一种选择(不会非常准确)是在设置目标位置之前检查它,如果它移动到边界之外,请将其保留在当前位置。你打算实现一个物理引擎来完成繁重的工作吗?
-
我建议使用像 Box2D(有 AS3 库)这样的现成解决方案来设置碰撞和其他东西。碰撞物理学是一门高级学科,您不太可能花费 A LOT 的时间和精力在自己的解决方案上,并且永远无法接近现有解决方案所提供的功能。好吧,除非你对它有很好的理解,或者你的最终目标是你自己的 2D 物理引擎。
-
感谢大家的回复,我不知道 Box2D,所以这肯定是我对 qns2 的下一步。 Box2D 能够对那个奇怪的形状进行边界检测吗?我担心必须在该形状中包含影片剪辑。我没有在该主题上指定的一件事是对象本身不需要相互之间具有碰撞机制,而只是排斥我将从我的界面收到的输入值。例如。如果输入是 Point(30,30),我需要将 MovieClips 从 30,30 推开一定距离。也会有多个输入。
标签: actionscript-3 flash actionscript air animate-cc