AS2阵列随机选择

时间:2010-12-22 13:12:51

标签: arrays actionscript actionscript-2

如何在flash as2中创建一个数组,从那里选择12个值,将它们分配给12个不同的变量?

到目前为止,我得到了这个:

quotes = new Array();


quotes[0] = "one";
quotes[1] = "two";
quotes[2] = "three";
quotes[3] = "four";
quotes[4] = "five";
quotes[5] = "six";
quotes[6] = "seven";
quotes[7] = "eight";
quotes[8] = "nine";
quotes[9] = "ten";
quotes[10] = "eleven";
quotes[11] = "twelve";
quotes[12] = "thirteen";
quotes[13] = "fourteen";
quotes[14] = "fifteen";
quotes[15] = "sixteen";
quotes[16] = "seventeen";
quotes[17] = "eighteen";
quotes[18] = "nineteen";
quotes[19] = "twenty";

我保留这种结构,因为从长远来看它更容易维护,并且具有更高的可读性。

我不知道如何从中取出12个随机值并将它们分配给变量。

好的,我现在已经添加了这篇文章:

trace(quotes)
for(var i:Number = 0; i<12; i++){
          var x:Number = Math.floor((Math.random()*quotes.length));
          trace("X :: " + x);
          trace("ARRAY VALUE :: " + quotes[x]);
          quotes.splice(x,1);          
     }

现在我在跟踪中看到了12个不同的值,没有重复。 但我仍然不知道如何使结果成为12种不同变量的值。

2 个答案:

答案 0 :(得分:1)

var myArray = quotes.slice(); // make a copy so that the original is not altered //
n = 12;
for (var i:Number = 0; i < n; i++) {
    var randomSelection = Math.floor((Math.random() * myArray.length));
    trace("Selected: " + myArray[randomSelection]);
    myArray.splice(randomSelection, 1);
}

从随机论坛中无耻地采取和改编。

答案 1 :(得分:0)

Math.random返回一个[0-1]范围内的数字,这意味着它永远不会实际返回1,因此,如果您需要将值设置为n + 1,则需要将其设置为n + 1,其中n是真正的上限。

现在,了解更多关于您想要使用的变量的样子以及它们是否属于同一个对象会更好。我将继续并假设变量没有按顺序命名(即prop1,prop2,prop3等),但它们将同时设置。

因此, a 解决方案将是:

// Store the variable names
var properties = [
    "firstProperty",
    "secondProperty",
    "propertyThree",
    "prop4",
    "prop5",
    "prop6",
    "seventhProp",
    "prop8",
    "prop9",
    "propTen",
    "propEleven",
    "property12"
];

var selection = quotes.slice(); // make a copy so that the original is not altered //

for (var i:Number = 0; i < properties.length; i++)
{
    var randomIndex = Math.floor(Math.random() * (selection.length + 1));

    // target is the object that holds the properties
    target[properties[i]] = selection.splice(randomIndex, 1);
}

这是另一种方法,它允许在不同的对象上设置属性:

var i = 0;
var randomQuotes = quotes.sort(function()
{
    return Math.round(Math.random() * 2) - 1;
});

target.prop = randomQuotes[i++];
target.prop2 = randomQuotes[i++];
other.prop = randomQuotes[i++];

// Keep going for all the properties you need to set

这可以抽象为RandomQuote类,使您可以重用该功能。