1

いくつかのコードをテストするためだけにアプリケーションを作成しています。敵を撃っている船があります。これらの敵は画面の上部から降りてきて、このコードで追加されます(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値をどのように制限しますか?

4

2 に答える 2

2

ランダムなx位置を計算するときは、画像の幅を考慮していません。textureRectプロパティが適切に設定されるように、敵のオブジェクトを作成した後、randomX宣言と初期化を移動する必要があります。

int offset = (int)[Enemy textureRect].size.width / 2;
int randomX = (arc4random() % (screenWidth - (2 * offset))) + offset;
于 2013-03-02T17:27:34.423 に答える
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 ++; 
}
于 2013-03-02T17:58:33.387 に答える