0

私は3つのムービークリップを持っています。それぞれに7つのフレームと異なる画像を再生するラベルがあります。それぞれをランダムに停止したいのですが、同じフレームに等しくなることはありません。array.pushが呼び出されたら考えていましたが、その方法がわかりません。だから私はこれまでにこれを持っています:

function startGame(event:MouseEvent)
{
    addChild(level6_mc);
    addChild(inGameNav_mc);
    level6_mc.gotoAndPlay(2);
    var timer = setTimeout(startAgain, 1000);
    startAgain();
}


// level 6
function startAgain()
{
    var randomNumber:Number= Math.floor(Math.random()*7);
    var door1 = level6_mc.door1_mc;
    var door2 = level6_mc.door2_mc;
    var door3 = level6_mc.door3_mc;
    door1.gotoAndStop(randomNumber);
    door2.gotoAndStop(randomNumber);
    door3.gotoAndStop(randomNumber);
}

これには簡単な方法が必要です、私はそれを理解することはできません。私はネット全体で解決策を探してきましたが、すべての方法は非常に複雑です。誰かが私が簡単な解決策を見つけるのを手伝ってくれますか?配列を使うように私に言ったら、例を挙げてください。前もって感謝します

4

3 に答える 3

1

私は次のようなアプローチを選択します。

function startGame(event:MouseEvent){
    addChild(level6_mc);
    addChild(inGameNav_mc);
    level6_mc.gotoAndPlay(2);
    var timer= setTimeout(startAgain, 1000);
    startAgain();
}

function startAgain(){
    var randomFrames:Array = getRandomFrames(3);
    var door1 = level6_mc.door1_mc;
    var door2 = level6_mc.door2_mc;
    var door3 = level6_mc.door3_mc;
    door1.gotoAndStop(randomFrames[0]);
    door2.gotoAndStop(randomFrames[1]);
    door3.gotoAndStop(randomFrames[2]);
}


/*
   Given input of 3, the return should be an array of integers randomly 
   chosen from the array defined by `frames`.  An example would be `[5,2,7]`
*/
function getRandomFrames(var $frameCount:Number):Array {
    var frames:Array = [1, 2, 3, 4, 5, 6, 7]
    var randomFrames:Array = new Array(Math.min($frameCount, frames.length));

    var pos:Number = 0;
    for (var i:int = 0; i < randomFrames.length; i++)
    {
        pos = int(Math.random() * frames.length);
        randomFrames[i] = frames.splice(pos, 1)[0];
    }
    return randomFrames
}

このマシンには Flash がないため、テストできません。しかし、アイデアは、フレーム番号 1 ~ 7 の配列があり、それらの番号のうち 3 つをランダムに選択して停止フレームにするというものです。

于 2012-10-28T18:01:03.633 に答える
1

フレーム数が少ないため、配列からフレームをスプライスできます。

function startGame(event:MouseEvent){
        addChild(level6_mc);
        addChild(inGameNav_mc);
        level6_mc.gotoAndPlay(2);
        var timer= setTimeout(startAgain, 1000);
        startAgain();
    }


    //level 6
    function startAgain(){
            var door1 = level6_mc.door1_mc;
            var door2 = level6_mc.door2_mc;
            var door3 = level6_mc.door3_mc;
            var stopsAt:Array = [1,2,3,4,5,6];
            door1.gotoAndStop(stopsAt.splice(Math.random()*stopsAt.length, 1)[0]);
            door2.gotoAndStop(stopsAt.splice(Math.random()*stopsAt.length, 1)[0]);
            door3.gotoAndStop(stopsAt.splice(Math.random()*stopsAt.length, 1)[0]);
于 2012-10-29T05:08:17.767 に答える
0
var prevNum:int = 0;

function startGame(event:MouseEvent)
{
addChild(level6_mc);
addChild(inGameNav_mc);
level6_mc.gotoAndPlay(2);
var timer = setTimeout(startAgain, 1000);
startAgain();
}

// レベル 6

function startAgain()
{
var randomNumber:int= getRandomNumber(7,prevNum);
prevNum = randomNumber;
var door1 = level6_mc.door1_mc;
var door2 = level6_mc.door2_mc;
var door3 = level6_mc.door3_mc;
door1.gotoAndStop(randomNumber);
door2.gotoAndStop(randomNumber);
door3.gotoAndStop(randomNumber);
}

function getRandomNumber(length:int,previousNumber:int):int
{ 
    var currentNumber:int;
    do{

  currentNumber = Math.floor(1+Math.random()*length);

}while(currentNumber==previousNumber);

return currentNumber;
}
于 2012-10-31T18:20:54.383 に答える