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



我越来越接近为运行以下代码时生成的错误找到解决方案。

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

宇野康之一直很有帮助。 我们目前正在尝试解决以下问题:

法典:

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

任何帮助将不胜感激。 闷!

假设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]);

当您检查 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);

最新更新