AS3 - 如何随机出现的多个物体永远不会互相接触?
问题描述:
我有多个在舞台上随机出现的物体,但是我希望它们在出现时不会碰到对方。AS3 - 如何随机出现的多个物体永远不会互相接触?
object1.x = Math.random() * stage.stageWidth;
object1.y = Math.random() * stage.stageHeight;
object2.x = Math.random() * stage.stageWidth;
object2.y = Math.random() * stage.stageHeight;
object3.x = Math.random() * stage.stageWidth;
object3.y = Math.random() * stage.stageHeight;
etc...
而且我怎样才能让他们出现在一个盒子里,而不是舞台。
答
我有随机出现在舞台上的多个对象,但我想他们 永远不要相互接触,当他们出现
他们显然不能随意进而出现。
一个幼稚,但很快码解决方案是使用实际上将使用元素之前边框碰撞:
// http://stackoverflow.com/questions/2752349/fast-rectangle-to-rectangle-intersection
function rectIntersection(r1,r2) {
return !(r2.left > r1.right ||
r2.right < r1.left ||
r2.top > r1.bottom ||
r2.bottom < r1.top);
}
如果确实是有,你可以重新运行的随机位置的碰撞直到没有任何碰撞。
这种方法是天真的,因为您每次尝试随机放置时都需要为屏幕上的所有元素运行碰撞检测。如果失败(意思是碰撞),那么你需要再次运行它,直到没有。
请记住,您也可以预先计算展示位置,而不是检查动画运行时(如果它是动画)。
对于你的第二部分问题。
而且我怎样才能让他们出现在一个盒子里,而不是 阶段。
而不是使用stageWidth
作为放置变量,您可以使用函数返回一个范围内的随机整数。
提供将是范围:
- 左上/右上为宽度
- 左下/右下为高度
..你想要约束你的元素的方框。
功能n会在这些范围内返回一个随机整数,并且你的方框总是会落入该方框内。
这里的代码片段,让你开始:
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
我下面回答了这一点,但你刚才在一天前问这个问题,并得到完全有效的答案 - 你认为如果你再问有人会神奇地给你现成的代码? –