需要为此找到解决方案。
我有3个对象位于屏幕上的位置:Object1 -0.7,Object2 0,Object3 -0.7。
现在我想把这个位置随机调用,所以每当我调用该函数时,3个对象都有不同的X位置而没有重叠。
到目前为止,我有:
var rectPos = [ -0.7, 0, 0.7 ];
var rand1 = rectPos[Math.floor(Math.random() * rectPos.length)];
var rand2 = rectPos[Math.floor(Math.random() * rectPos.length)];
var rand3 = rectPos[Math.floor(Math.random() * rectPos.length)];
rect1 = rand1;
rect2 = rand2;
rect3 = rand3;
但我无法弄清楚如何不让对象超载。
任何想法?
答案 0 :(得分:1)
您有多种解决方案。您可以随机播放数组,然后选择第一个矩形的第一个值,第二个矩形的第二个值等。其他方法可以是在“选择”后从数组中删除选定的值。以下示例适用于任何大小的数组。
1随机排序的简单随机播放(请注意,您可以使用Fisher Yates Algorithm进行更好的随机化:?)
var arr = [-0.7, 0, 0.7];
arr.sort(function(){
return Math.random() - Math.random();
});
// rect1 = arr[0]
// rect2 = arr[1] ... etc.
2从数组中删除随机化的
var arr = [-0.7, 0, 0.7];
var copy = arr.slice(0); // Copy the initial array
var rects = [];
for(var i = 0; i < arr.length; i += 1){
var index = Math.floor(Math.random() * copy.length);
rects.push(copy[index]);
copy.splice(index, 1); // Remove the 'chosen' value from the copied array
}
// rect1 = rects[0]
// rect2 = rects[1] ... etc.
3其他喜欢随机播放,而randomed值不是唯一的.. [没有演示]
答案 1 :(得分:0)
你不能这样做吗?:
var rand1 = Math.floor(Math.random() * rectPos.length);
@Edit:
var test = [-0.7, 0, 0.7];
function getPosition() {
var rectPos = test.slice(); ;
function getX(index) {
var res = rectPos[index];
rectPos.splice(index, 1);
return res
}
var rand1 = getX(Math.floor(Math.random() * rectPos.length));
var rand2 = getX(Math.floor(Math.random() * rectPos.length));
var rand3 = getX(Math.floor(Math.random() * rectPos.length));
}