1

ですから、私のフラッシュには、どちらの方法を選択するかを選択できる部分があり、選択した道路にはランダム化が含まれている必要があります。ユーザーが1つの道路を選択すると、その道路の1つに投げ込まれるように構築しようとしています。ランダムにラベル付けされた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に選択される可能性が低いいくつかのまれなフレームを追加する方法です。ありがとうございます。

4

1 に答える 1

0

加重乱数を使用して、必要に応じて行うことができます。このコードをチェックしてください、それはあなたが望むようにします:

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 の回答を確認してください: 加重乱数

于 2012-11-07T16:49:17.037 に答える