2013-03-12 29 views
0

即時通訊嘗試創建一個隨機數組,每次啓動應用程序時將改變我的圖片(在tilelist中)的位置。希望你能理解尋找什麼即時通訊的,我真的不知道如何正確地鏈接在這裏代碼:/Actionscript 3:試圖創建一個隨機數組

我認爲它更容易簡單地複製到閃存和視圖從那裏

謝謝:)

這裏是我的代碼:

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; 
+1

您應該將問題和代碼縮小爲您想要實現的示例。 – LopSae 2013-03-12 23:23:42

回答

0

陣列隨機化的東西,所以我結束了創建爲它我的陣列工具類的靜態方法,該方法非常頻繁出現在我的所有項目。

它使用Fisher–Yates shuffle,它應該是用於混洗數組內容的最無偏(高效?)算法。有可能是這樣做的更快的方式(如使用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類的名稱。當然如果你不想使用工具類,你可以直接使用這個函數。

+0

我試過這個,但我怎麼現在可以將標籤鏈接到相應的圖片?防爆。總是得到一個紅圈,但這個位置是隨機的。 – 2013-03-14 18:33:16

+0

我不確定將標籤鏈接到圖片是什麼意思。 AFAIU從你的示例代碼中,你想知道數組項目指向哪個圖像,而不管它在數組中的索引。在這種情況下,您可以簡單地使用一個對象數組: 'var myArray:Array = new Array({color:'red',image:imageDir/redImage.jpg},{color:'green',image:imageDir/greenImage .jpg},...)' 現在洗牌後,你仍然知道每個項目指向哪裏。那是你在找什麼? – localhost 2013-03-22 12:06:45

0

試試這個

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

只是斯塔雖然tiate randomizeArray,並且不要用像你的源代碼那樣的空數組填充它!

0

我建議創建一個單獨的對象來保存相關數據,並使用該對象類型的單個Array/Vector。

要回答你的問題,隨機化一個數組對於array.sort()和一個隨機選擇函數來說相當容易。這個方法也可以用來隨機化任何數組。你不需要拼接數組或迭代。

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

myArray.sort(sortOnRandom);