我刚刚开始学习Unity3D javascript,这是我第一次尝试学习,试图复制我拥有的随机的Objective-C代码片段,并且我有以下代码:
function Shuffle(theCardArray : Array) {
var dupeArray = new Array();
var count = theCardArray.length;
print("theCardArray: " + theCardArray);
dupeArray = theCardArray;
count = dupeArray.length;
print("A) Count dupeArray: " + count);
print("B) Count dupeArray: " + dupeArray.length);
theCardArray.Clear();
for (var i = 0; i < count; i++) {
// Select random element between i and the end of the array to swap it
var nElements = count - i;
var n = Random.Range(0, nElements);
print("#1");
print("C) Count dupeArray: " + dupeArray.length);
print("dupeArray: " + dupeArray);
var dummyString = dupeArray[n];
print("#2");
theCardArray.Push(dummyString);
print("#3");
}
}
我在打印中得到以下信息:
theCardArray:返回,D2,D3,D4,D5,D6,D7,D8,D9,D10,DJ,DQ,DK
A)计数dupeArray:13
B)计数dupeArray:13
'#1'
C)计数dupeArray:0
在B)dupeArray有13个实体,在C)dupeArray为空!
有人可以向我解释为什么数组在C)为空吗?
顺便说一句,我知道Unity3D中还有其他方法可以实现相同的目的,但这是学习的方法!
我为此提出的最终的,真正的解决方案是:
通过以下方式致电ShuffleThis:
arr = ShuffleThis(arr);
随机功能:
function ShuffleThis(theCardArray : Array) : Array {
var size : int = theCardArray.length;
for (var i : int = 0; i < size; i++) {
var indexToSwap : int = Random.Range(i, size);
var oldValue = theCardArray[i];
theCardArray[i] = theCardArray[indexToSwap];
theCardArray[indexToSwap] = oldValue;
}
return theCardArray;
}
这是因为数组dupeArray
只是对原始数组的引用theCardArray
,所以当您清除原始数组时,您还将清除重复的数组。引用。
为了解决您的问题,您应该克隆原始数组,可以使用像这样的切片来完成...
var dupeArray = theCardArray.slice(0);
另外,也可以使用jQuery扩展方法来完成此操作...
var dupeArray = $ .extend(true,[],TheCardArray);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句