as3 - 如何在不发生碰撞的情况下随机化对象位置?

时间:2015-10-25 06:30:11

标签: actionscript-3

如果我有两个名为block1和block2的实例。他们离开了舞台。它向下滚动y位置,然后重新生成顶部。但我不希望x / y位置与其他块相撞?我希望它重新恢复到位,但我希望它随机化,但同时我不希望它相互接触?

继承我的代码:

if (block1.y > stage.stageHeight)
{
    block1.y = -550;
    block1.x = (Math.floor(Math.random() * (maxNum - minNum + 5)) + minNum);
}

我很确定我是以错误的方式计算重生坐标,但我不确定如何将它放在随机的x和y位置,而不会与其他块发生碰撞。

1 个答案:

答案 0 :(得分:0)

一个非常简单的方法可以只是生成你的盒子,进行碰撞检查,然后如果发生碰撞,移除并重新生成并重新检查,直到找到适合的空白点

这显然效率很低,但如果你已经有某种碰撞检测工作,那么很快就能很快实现。请记住,如果没有可以放入的位置,那么它将永远循环,因此您可能想要设置最大尝试次数或类似的东西。

实际工作的速度/效果将取决于产卵区域是否相当稀疏或非常密集,这将增加/减少它在前几次找到一个好的空白点的百分比。

虽然你的碰撞检测系统提供了最小的平移向量,但是如果你的碰撞检测系统提供了最小的平移向量,那么还有一些改进空间,你可以将新形状移动并使用该位置来生成。

其他简单方法可能涉及跟踪已知占用位置并调整随机范围以避免这些值。