为什么我的循环只看到第一个数组元素的值?

why is my loop only seeing the value of the first array element?

本文关键字:数组元素 第一个 我的 循环 为什么      更新时间:2023-09-26
function Deal()
{
var suffledDeck:Array;
var playerOneCards: Array;
var playerTwoCards: Array;  
var first:int =0;
var second:int = 1;
suffledDeck = new Array();
playerOneCards = new Array();
playerTwoCards = new Array();
//var CardLeft:int = Deck.length;
for(var i = 0; i < Deck.length; i++) 
{   
    Debug.Log(Deck.length);
    var ranNum = Random.Range(1,Deck.length);
    suffledDeck.Add(Deck[ranNum]);
    Debug.Log("suffled deck: " + suffledDeck.length);
}
//var halfDeck: int = (suffledDeck.length / 2);
for(var j = 0; j <=26 ; j++)
{       
    Debug.Log(first);
    Debug.Log(second);
    playerOneCards.Add(suffledDeck[first]); 
    playerTwoCards.Add(suffledDeck[second]);
    Debug.Log(playerOneCards[first].img);   
    Debug.Log(playerTwoCards[second].img);  
    first += 2;
    second += 2;        
}
}

当我开始将数组拆分为两个单独的数组时,它开始忽略除第一个元素之外的所有元素。suffleDeck[]有52张牌对象加载,我试图分割数组,以便每个玩家可以有自己的牌组。

用于调试的控制台窗口:http://puu.sh/2dqZm

我认为问题出在var ranNum = Random.Range(1,Deck.length)

ranNum应该生成0到Deck.length - 1之间的随机索引,因为数组索引从0开始(而不是1)。

问题在于这些日志语句:

Debug.Log(playerOneCards[first].img);   
Debug.Log(playerTwoCards[second].img);

firstsecondsuffledDeck的有效索引,但每个玩家的牌组只有一半的牌。尝试在两个日志语句中使用j作为下标,而不是firstsecond

你也应该限制你的循环到j < 26,而不是j <= 26。实际上,您要尝试在每个玩家的牌组中放入27张牌。

因为:

 Debug.Log(playerTwoCards[second].img);  

这里second的值是1,而你的数组中只有一项是0。导致ArgumentoutofRangeException .

所以尝试:

  for(var j = 0; j <=26 ; j++)
  {       
    Debug.Log(first);
    Debug.Log(second);
    playerOneCards.Add(suffledDeck[first]); 
    playerTwoCards.Add(suffledDeck[second]);
    Debug.Log(playerOneCards[j].img);   
    Debug.Log(playerTwoCards[j].img);  
    first += 2;
    second += 2;        
  }