2013-03-02 58 views
1

我只是爲了測試一些代碼而製作應用程序。有一艘船正在射擊敵人。這些敵人從屏幕頂部下來,他們與被添加一個隨機的X在限制範圍內在舞臺上添加敵人

-(void) addEnemy { 

int randomX = arc4random() % screenWidth; 

Enemy* anEnemy; 

int diceRoll = arc4random() % 4; 

if (diceRoll == 0) { 
    anEnemy = [Enemy createEnemy:@"enemy1" framesToAnimate:24]; 

} else if (diceRoll == 1) { 
    anEnemy = [Enemy createEnemy:@"enemy2" framesToAnimate:17]; 

} else if (diceRoll == 2) { 
    anEnemy = [Enemy createEnemy:@"enemy3" framesToAnimate:14]; 

} else if (diceRoll == 3) { 

    anEnemy = [Enemy createEnemy:@"enemy4" framesToAnimate:24]; 
} 

[self addChild:anEnemy z:depthLevelBelowBullet]; 
anEnemy.position = ccp (randomX , screenHeight + 200); 

numberOfEnemiesOnstage ++; 
} 

敵人代碼(之所以說其4個不同的敵人是,它們都具有不同的行爲)加入價值意味着敵人有時候是屏幕外的一半。就像這樣:

如何限制從屏幕兩側的x值,因此不會出現這種情況?

回答

2

當您計算隨機x位置時,您並未考慮圖像寬度。您必須在創建敵方對象後移動randomX聲明和初始化,以便正確設置textureRect屬性。

int offset = (int)[Enemy textureRect].size.width/2; 
int randomX = (arc4random() % (screenWidth - (2 * offset))) + offset; 
+0

我得到警告+類方法textureRect沒有找到 – Stumpp 2013-03-02 17:41:36

+0

好吧,我假設'Enemy'是CCSprite'的'子類。您必須將圖像寬度的一半放在'offset'變量中。 – Alexander 2013-03-02 17:43:10

+0

有什麼問題嗎? – Alexander 2013-03-03 01:47:03

0

上面的答案是正確的,但如果您使用的是CCSprite,則會有所不同。試試下面的代碼:

-(void) addEnemy { 

int randomX = arc4random() % screenWidth; 

Enemy* anEnemy; 

int diceRoll = arc4random() % 4; 
int halfWidth; 

if (diceRoll == 0) { 
    anEnemy = [Enemy createEnemy:@"enemy1" framesToAnimate:24]; 
    halfWidth = anEnemy.contentSize.width/2; 

} else if (diceRoll == 1) { 
    anEnemy = [Enemy createEnemy:@"enemy2" framesToAnimate:17]; 
    halfWidth = anEnemy.contentSize.width/2; 

} else if (diceRoll == 2) { 
    anEnemy = [Enemy createEnemy:@"enemy3" framesToAnimate:14]; 
    halfWidth = anEnemy.contentSize.width/2; 

} else if (diceRoll == 3) { 

    anEnemy = [Enemy createEnemy:@"enemy4" framesToAnimate:24]; 
    halfWidth = anEnemy.contentSize.width/2; 
} 

if(randomX < halfWidth) { 
    randomX = halfWidth; 
} else { 
    randomX = randomX-halfWidth; 
} 

[self addChild:anEnemy z:depthLevelBelowBullet]; 
anEnemy.position = ccp (randomX , screenHeight + 200); 

numberOfEnemiesOnstage ++; 
} 
+0

嗯由於某種原因,每個敵人現在產卵到屏幕的右側,所以我們只能看到他們中的一半 – Stumpp 2013-03-02 20:00:33

+0

對不起,我在我發佈的代碼中犯了一個小錯誤,但我已經更新它以反映新代碼。 – 2013-03-02 22:03:32

+0

感謝您的幫助,但我無法讓代碼正常工作。有些敵人仍然在屏幕外產卵:/當我射擊敵人時,如果不是子彈擊中敵人的中心,他們就不會被擊中。看起來他們沒有任何內容,只是可見的。也許這是使contentSize/2不起作用?敵方精靈的代碼是'enemySprite = [CCSprite spriteWithFile:[NSString stringWithFormat:@「%@ _ enemy0001.png」,theBaseImage]]; [self addChild:enemySprite]; enemySprite.position = ccp(0,0); ' – Stumpp 2013-03-02 23:57:58