在限制范围内在舞台上添加敌人

时间:2013-03-02 17:23:18

标签: ios xcode cocos2d-iphone

我正在制作一个仅用于测试某些代码的应用程序。有一艘船在射击敌人。这些敌人从屏幕顶部下来,并添加了这个代码(它的4个不同的敌人之所以有不同的行为)

-(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 ++; 
}

敌人正在添加一个随机的x值,这意味着敌人有时会在屏幕外一半。像这样:

如何限制屏幕两侧的x值,以免发生这种情况?

2 个答案:

答案 0 :(得分:2)

当您计算随机x位置时,您没有考虑图像宽度。您必须在创建敌对象后移动randomX声明和初始化,以便正确设置textureRect属性。

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

答案 1 :(得分: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 ++; 
}