从数组as3加载随机影片剪辑时出错

时间:2016-03-16 16:11:25

标签: actionscript-3 flash actionscript

我正在接近为运行下面代码时生成的错误找到解决方案。

我在舞台上有三个盒子。目标是从数组中加载一个随机项,而不会在三个框中的多个框中复制任何一个项。

Yasuyuki Uno非常乐于助人。我们目前正在尝试解决以下问题:

代码:

var animalArray: Array = [animal1, animal2, animal3, animal4, animal5, animal6, animal7, animal8, animal9, animal10];
var randArr: Array = [];
var rand: int;

// Get random value for 3 times.
for(var i:int=0,len:int=animalArray.length;i<3;i++,len--){
    rand = Math.floor( Math.random() * len); // Generate random integer between 0 and len-1.
    randArr.push(animalArray.splice(rand,1)); // Delete a value from original array and add that value to new array.
}

box1.addChild(randArr[0]);
box2.addChild(randArr[1]);
box3.addChild(randArr[2]);
  

错误消息:参数数量不正确。预期不超过0

非常感谢任何帮助。日Thnx!

2 个答案:

答案 0 :(得分:0)

假设animal1animal2等是您库中的链接ID,它们是类引用,因此需要使用new运算符对它们进行实例化。

您的代码还有一些其他非关键问题,从我的角度来看很难理解:

  • 使用animal1代替Animal1等等来使用类名。未大写的名称看起来像属性或函数,而不是类。
  • 使用Array代替Vector。向量可以提供更好的错误;如果你从一开始就使用矢量,你的问题就很明显了。

示例:

var animalTypes:Vector.<Class> = new <Class>[Animal1, Animal2, Animal3, Animal4, Animal5, Animal6, Animal7, Animal8, Animal9, Animal10];

var randomAnimals:Vector.<DisplayObject> = new <DisplayObject>[];

// Get random value for 3 times.
for (var i:int = 0; i < 3; i++){
    // Generate random integer between 0 and length-1.
    var randomIndex:int = Math.random() * animalTypes.length; 
    // Remove a class from original vector.
    var randomAnimalType:Class = animalTypes.splice(randomIndex, 1)[0]; 
    // Create an instance of the animal class.
    var randomAnimal:DisplayObject = new randomAnimalType(); 
    // Add the instance to the random vector.
    randomAnimals.push(randomAnimal); 
}

box1.addChild(randomAnimals[0]);
box2.addChild(randomAnimals[1]);
box3.addChild(randomAnimals[2]);

答案 1 :(得分:-1)

当您检查animalArray的length表达式时,无需更改变量len。 此外,如果您想填充3个随机项新数组,则需要使用以下代码:

const arr: Array = [animal1, animal2, animal3, animal4, animal5, animal6, animal7];
const genArr: Array = [];

var len: int = arr.length;
var n: int = 3;
while(n--) {
    const randIndex: int = Math.floor(Math.random()*len); // get random index

    genArr.push(arr.splice(randIndex, 1)[0]); // splice returns array, so we need first and exist item
    len--; // decrement length as optimized solution of no-read length of array each cycle
}

trace(genArr);