2014-03-05 24 views
0

下午好程序員。我正在嘗試在動作腳本2中創建遊戲。概念是遊戲會隨機選取一個對象。玩家必須獲得物體,然後遊戲纔會調出一個不同的隨機物體。 (這些對象在數組中)。隨機陣列,接頭陣列。動作腳本2

static private var oneArray:Array = new Array("milk","cheese","bread"); 
static private var randomItem:String = oneArray[Math.floor(Math.random() * oneArray.length)]; 

所以你可以看到我已經做到了。 現在遊戲會顯示文字;

_root.hud.getItem.text = randomItem; 

從上面的代碼可以看出,文本字段將從該數組中選擇一個randomeItem。

if (randomItem == ("milk")) 
    { 
     if (_root.milk.hitTest(_root.player._x + 60, _root.player._y - 60, true) || _root.milk.hitTest(_root.player._x - 60, _root.player._y - 60, true)) 
     { 
      trace("got milk"); 
      _root.milk.gotoAndStop(2); 
     } 
    } 

你看到上面的代碼意味着如果文本字段顯示「牛奶」,如果玩家接觸牛奶,那麼牛奶消失這一點。

現在,當碰撞爲真時,我希望textfield顯示數組中的另一個隨機項,但我不希望出現相同的名稱。 我試過從數組中拼接牛奶,但textfield仍顯示文字「牛奶」。

它基本上沒有更新。

我已經盡力了,抱歉如果上面提供的信息不是最好的。 有人可以幫助我嗎。 謝謝。

回答

1

交換oneArray中的最後一個和隨機選擇的項目,並減少隨機乘數(len),因此最後一個項目(先前隨機選擇的)將不會再次打擾。

private var oneArray:Array = new Array("milk","cheese","bread"); 
private var len:int = oneArray.length - 1; 
private var rand:int; 
private var randomItem:String; 

中隨機選擇項目

rand = Math.floor(Math.random() * len); 
randomItem = oneArray[rand]; 
_root.hud.getItem.text = randomItem; 

碰撞是真實

var item:String = oneArray[rand]; 
oneArray[rand] = oneArray[len]; 
oneArray[len] = item; 
len--; 

if (len < 0) { 
    //goto next level 
} 
else { 
    // and select random item again 
} 
+0

非常感謝你!!!! 還有一個問題,如果你不介意回答... 當數組是空的,我希望它進入下一個框架可以說 (如果數組是空的){去下一幀}這將是..if(oneArray.length = 0){this.goto ... etc) – Moynul

+0

我已更新答案 – asannov

+0

非常感謝您抽出時間。謝謝! – Moynul