2012-08-16 53 views
0

我有一個NSMutableArray的NSNumbers。 我枚舉數組,併爲每個「1」在那裏我需要檢查其在陣列中的位置並做一些事情。這就是我要做的事:如果對象相同,如何檢查NSMutableArray中對象的索引?

for (NSNumber *number in fieldArray) { 

    int temp = [number intValue]; 
    if (temp != 0) 
    { 
     if (temp == 1) 
     { 
      switch ([fieldArray indexOfObject:number]) { 
       case 0: 
       { 
        CCSprite *x = [CCSprite spriteWithFile:@"x.png"]; 
        x.position = ccp(53,265); 
        [self addChild:x]; 
       } 
        break; 
       case 1: 
       { 
       //this code never gets called 
       } 

因爲我有一個「1」的陣列我switch語句永遠不會去任何地方,但1號。我該如何解決這個問題的零位?如何檢查陣列單元中的東西的位置?

爲什麼我需要這個,爲什麼我這樣做。我正在製作一個tic-tac-toe遊戲。我將字段存儲在容量爲9的NSMutableArray中。因此,數組中的每個數字都是在播放字段中的單元格。如果單元格爲空,則數組爲0,如果存在x - 數組中有1個值,並且單元格中爲零 - 數組爲2時。數組爲2時 繪製時間到達時,我遍歷數組並檢查我看到了什麼價值。如果價值爲零,我什麼都不做,但如果它是一個,我畫在某個位置。 也許有更簡單的方法來做到這一點,如果沒有辦法解決我的問題,你可以指出我在那個方向。編號: 工作解決方案是將枚舉更改爲常規循環。

for (int i = 0; i < 9; i++) { 

     int temp = [[fieldArray objectAtIndex:i] intValue]; 
     if (temp == 1) 
     { 
      switch (i) { 
       case 0: 
       { 
        CCSprite *x = [CCSprite spriteWithFile:@"x.png"]; 
        x.position = ccp(53, 265); 
        [self addChild:x z:1]; 
        break; 
       } 

       case 1: 
       { 
        CCSprite *x = [CCSprite spriteWithFile:@"x.png"]; 
        x.position = ccp(159, 265); 
        [self addChild:x z:1]; 
        break; 
       } 

回答

2

我想我會避免這個枚舉,並首先看數組的位置,然後看內容。 (這不是在編譯器檢查,但應該給你的想法。我認爲有可能寫positionOfSpriteForIndex:方法返回正確的ccp()值)。

for (int idx = 0; idx < [fieldArray count]; idx++) { 
    NSNumber *number = [fieldArray objectAtIndex:idx]; 
    CCSprite *x = nil; 
    switch ([number intValue]) { 
     case 1: 
      x = [CCSprite spriteWithFile:@"x.png"]; 
      x.position = [self positionOfSpriteForIndex:idx]; 
      [self addChild:x]; 
      break; 

     case 2: 
      x = [CCSprite spriteWithFile:@"o.png"]; 
      x.position = [self positionOfSpriteForIndex:idx]; 
      [self addChild:x]; 
      break; 

     default: 
      break; 
    } 
} 
+0

更改爲通常的循環確實有幫助,但我主要保留了我的代碼。 – Dvole 2012-08-16 18:18:10

0

看起來你需要把你的break你的括號內。

switch ([fieldArray indexOfObject:number]) { 
       case 0: 
       { 
        CCSprite *x = [CCSprite spriteWithFile:@"x.png"]; 
        x.position = ccp(53,265); 
        [self addChild:x]; 
       break; 
       } 
+0

還是一樣的,分手的立場是錯誤的,但職位仍然評估相同。 – Dvole 2012-08-16 18:17:09