0

アプリケーションが起動されるたびに(タイルリスト内の)写真の位置を変更するランダム化された配列を作成しようとしています。あなたが私が探しているものを理解していることを願っています、そして私はここでコードを正しくリンクする方法を本当に理解していません:/

フラッシュにコピーしてそこから見る方が簡単だと思います

ありがとう :)

これが私のコードです:

flash.events.MouseEvent;

btn_back.addEventListener(MouseEvent.CLICK, ftilbake);


function ftilbake(evt:MouseEvent)
{
    gotoAndStop(1);
}


var heroArray:Array = new Array();
var randomizeArray:Array = new Array();

createArrays()

function createArrays()
{
heroArray[0] = new Array("Rumble","Garen","Lulu","Corki","Warwick");

heroArray[1] = new Array("Bilder/Champions/Rumble.jpg","Bilder/Champions/Garen.jpg","Bilder/Champions/Lulu.jpg","Bilder/Champions/Corki.jpg","Bilder/Champions/Warwick.jpg");

heroArray[2] = new Array("Bilder/Champions/Rumble1.jpg","Bilder/Champions/Garen1.jpg","Bilder/Champions/Lulu1.jpg","Bilder/Champions/Corki1.jpg","Bilder/Champions/Warwick1.jpg");

heroArray[3] = new Array("the Mechanized Menace","the Might of Demacia","the Fae Sorceress","the Daring Bombardier","the Blood Hunter");
heroArray[4] = new Array(0,0,0,0,0);
heroArray[5] = new Array("Rumble.wav","Garen.wav","Lulu.wav","Corki.wav","Warwick.wav");
randomizeArray[0] = new Array();
randomizeArray[1] = new Array();
randomizeArray[2] = new Array();
randomizeArray[3] = new Array();
randomizeArray[4] = new Array();

//randomizing the positions in the array(?)
var randomPos:int = 0;
for (var i:int = 0; i < heroArray.length; i++)
{
    randomPos = int(Math.random() * heroArray[0].length);
    while (randomizeArray[randomPos][0] != null)
    {
        randomPos = int(Math.random() * heroArray.length);  
    }
}
}


var totalKlikk:int = 0;


for (var teller1:int = 0; teller1 <heroArray[0].length; teller1++)
{
    leagueChamps.addItem({label:heroArray[0][teller1], source:heroArray[1][teller1]});
}

leagueChamps.columnWidth = 80;

leagueChamps.rowHeight = 80;

leagueChamps.columnCount = 5;

leagueChamps.rowCount = 1;

leagueChamps.direction = "horizontal";

leagueChamps.addEventListener(MouseEvent.CLICK, bildeKlikk);


function bildeKlikk(evt:MouseEvent)
{
    var element:Object = leagueChamps.selectedItem;
    var fil:String = element.source;
    txtChHero.visible = false;
    totalKlikk++;
    if (totalKlikk <11)
    {
        for (teller1 = 0; teller1 <heroArray[0].length; teller1++)
        {
            if (heroArray[1][teller1] == fil)
            {
            heroArray[4][teller1]++;
            if (heroArray[4][teller1] == 1)
            {
                txtBox1.visible = true;
                txtBox2.visible = true;
                leagueShow.source = heroArray[2][teller1];
                txtBox1.text = heroArray[0][teller1];
                txtBox2.text = heroArray[3][teller1];
            }
            if (heroArray[4][teller1] == 2)
            {
                txtBox1.visible = true;
                txtBox2.visible = true;
                leagueShow.source = heroArray[2][teller1];
                txtBox1.text = heroArray[0][teller1];
                txtBox2.text = heroArray[3][teller1];
                heroArray[5][teller1].play();
            }
            if (heroArray[4][teller1] == 3)
            {
                bildeKlikk3();
            }
        }
    }
}
else
{
    txtChHero.visible = true;
    txtChHero.text = "Du har klikket følgende mange ganger på de forskjellige bildene:";
    txtH1.text = heroArray[4][0]
    txtH2.text = heroArray[4][1]
    txtH3.text = heroArray[4][2]
    txtH4.text = heroArray[4][3]
    txtH5.text = heroArray[4][4]
    txtBox1.visible = false;
    txtBox2.visible = false;
    leagueShow.visible = false;
}
}


function bildeKlikk3()
{
    txtBox1.visible = true;
    txtBox2.visible = true;
    leagueShow.source = heroArray[2][teller1];
    txtBox2.text = "Ikke mer informasjon";
}


txtBox2.visible = false;

txtBox1.visible = false;
4

3 に答える 3

0

関連データを保持する単一のオブジェクトを作成し、そのオブジェクトタイプの単一の配列/ベクトルを使用することをお勧めします。

あなたの質問に答えるために、配列のランダム化は、array.sort()とランダム選択関数を使用して行うのはかなり簡単です。このメソッドは、任意の配列をランダム化するためにも使用できます。配列をスプライスしたり、反復したりする必要はありません。

function sortOnRandom(a:Object, b:Object):Number{
  if(Math.random() > 0.5){
    return 1;
  }else{
    return -1;
  }
}

myArray.sort(sortOnRandom);
于 2013-03-14T03:21:45.263 に答える
0

配列のランダム化は、すべてのプロジェクトで非常に頻繁に発生するものであるため、Array ユーティリティ クラスに静的メソッドを作成することになりました。

これは、配列の内容をシャッフルするための最も偏りのない (そして効率的な?) アルゴリズムであると考えられている、 Fisher-Yates シャッフルを使用します。それを行うためのより高速な方法がある可能性があります(array.sortOn()メソッドを使用するなど)。

シャッフル方法:

/**
     * shuffle the given array
     * @param   array
     * @return
     */
    public static function shuffle(array:Array):Array 
    {

        var index   :int;
        var item    :*;
        var limit   :int    = array.length as int;

        for (var i:int = limit-1; i >= 0 ; --i) 
        {
            index           = Math.floor(Math.random() * (i + 1));
            item            = array[index];
            array[index]    = array[i];
            array[i]        = item;
        }

        return array;

    }

例:

var myArray:Array = new Array("Red","Orange","Yellow","Green","Blue");

myArray           = ArrayUtils.shuffle(myArray);

ここで、ArrayUtils は、使用する Array Utility クラスの名前です。もちろん、ユーティリティ クラスを使用したくない場合は、単純に関数を直接使用できます。

于 2013-03-14T09:53:16.320 に答える
0

これを試して

while (heroArray.length > 0) {
  randomizeArray.push(heroArray.splice(Math.round(Math.random() * (heroArray.length - 1)), 1)[0]);
}

ただし、randomizeArray をインスタンス化するだけで、ソースのように空の配列で埋めないでください。

于 2013-03-14T00:39:53.627 に答える