ActionScript 3, перейдите и остановите случайный кадр из следующих 3

Итак, на моей флешке у меня есть части, где у вас есть выбор, какой путь выбрать, и эта дорога, которую вы выбираете, должна иметь рандомизацию в них, и я пытаюсь построить ее так, чтобы когда пользователь выбирает одну дорогу, он попадал в одну из 3 помеченных кадра случайным образом, и я даже подумал о добавлении некоторых частей рандомизации на дорогу, которая имеет наименьший шанс произойти.

    stop();

road1a.addEventListener(MouseEvent.CLICK, firstroadA);

function firstroadA(e:MouseEvent):void{
    if(this.currentFrame == 9){
        var randomNumber:Number = Math.floor(Math.random()*3)
        if (randomNumer == 0){
            gotoAndStop(10);
        }
        if (randomNumber == 1){
            gotoAndStop(11);
        }
        if (randomNumber == 2){
            gotoAndStop(12);
        }
    }
    else{
        nextFrame();
    }

}

в этом тесте я попытался сделать так, чтобы выбор пользователя происходил в 9-м кадре, и когда он выбирает щелкнуть firstroadA, он переходит к некоторым случайным кадрам, 10, 11 или 12... так что, я надеюсь Я был достаточно ясен; Вкратце мой вопрос заключается в том, как рандомизировать кадры gotoAndStop и как добавить некоторые редкие кадры, у которых меньше шансов быть выбранными для gotoAndStop.... спасибо!


person Esa T. H.    schedule 07.11.2012    source источник


Ответы (1)


Вы можете, как хотите, используя взвешенные случайные числа. Проверьте этот код, он делает то, что вы хотите:

stop();

gotoAndStop(9);

road1a.addEventListener(MouseEvent.CLICK, firstroadA);

function firstroadA(e:MouseEvent):void
{
    if(this.currentFrame == 9)
    {
        // These are the weight chance for each "road"
        // I used 30%, 50%, and 10% arbitrarily
        var choiceWeights:Array = [30, 50, 10];

        // frame choices
        var roadFrames = [10, 11, 12];

        // get a weighted random
        var r:int = makeChoiceWithWeight(choiceWeights);

        //go to the selected frame
        gotoAndStop(roadFrames[r]);
    }
    else
    {
        nextFrame();
    }
}

function makeChoiceWithWeight(choiceWeights:Array):int
{
    var sumOfWeights:int = 0;
    var numWeights:int = choiceWeights.length;

    // add all weights
    for(var i:Number = 0; i < numWeights; i++) sumOfWeights += choiceWeights[i];

    // pick a random number greater than zero and less than the total of weights
    var rnd:Number = Math.floor(Math.random()*sumOfWeights);

    //keep reducing the random number until less than a choices weight
    for(var ii:Number = 0; ii < numWeights; ii++)
    {
        if(rnd < choiceWeights[ii]) return ii;

        rnd -= choiceWeights[ii];
    }

    // should never reach this point
    return 0;
}

Для более глубокого изучения взвешенных случайных чисел проверьте этот ответ SO: Взвешенные случайные числа

person ezekielDFM    schedule 07.11.2012