2012-07-25 39 views
2

小問題我在某個特定時間在屏幕上有大量對象(敵人),無法重新定義它們的值。我讓我的敵人在屏幕上以3開頭。XCode - 重新定義宏

我的目標是根據當前得分來改變敵人的數量。

我附上了下面的代碼片段。

#define kEnemies 3 

- (void) EnemyIncrease 
{ 
    if (self.score>=100) { 
    #define kEnemies 4 
    } 
} 

//我也試過除其他事項外

#define kEnemies 3 

- (void) EnemyIncrease 
{ 
    if (self.score >=100) { 
    #undef kEnemies 
    #define kEnemies 6 
    } 
} 

會很感激一些幫助。


我現在已經改變了我的代碼以下

int numberOfEnemies; 

if (self.score>=0) { 
numberOfEnemies = 3 
} 

else if (self.score>=100) { 
numberOfEnemies = 4 
} 

但是現在的問題是,當這些分值達到新條件下陣列不更新numberOfEnemies。

for(int i = 0; i < numberOfEnemies; i++) 

道歉,我還是新編碼,並試圖修改現有的代碼

+2

使用變量,而不是宏。即使在編譯代碼之前,宏在預處理階段也會評估它們的值。 – 2012-07-25 11:22:36

回答

6

宏進行預處理,這意味着在你的代碼的其餘部分甚至被編譯,他們正在處理。

拿出你的代碼,這意味着預處理器看到了這個(使用你的第二個例子)。最終,kEnemies值是6:

#define kEnemies 3 
#undef kEnemies 
#define kEnemies 6 

這不是一個真正可行的使用#定義變量,我只用他們的常量。

你可以使用一個成員變量:

int numberOfEnemies; 

... 

if (self.score >=100) 
{ 
    numberOfEnemies = 6 
} 

(我刪除了ķ前綴這種風格是爲常數)

+0

感謝詹姆斯你的解釋是有道理的......如果你能看看我的問題的第二部分,我會非常感激。 – Anthony 2012-07-25 21:30:57

+0

您可能希望標記此人作爲回答,並將第二部分作爲單獨問題發佈,因爲他們不同,您可能會得到更好的回覆。 – 2012-07-25 22:08:52