0

ユーザーがヒットしたものに基づいて、赤、黄、または緑(3、2、または1)のいずれかを格納する配列を作成しました。コードで配列内の乱数を選択し、対応する色を画面に表示したいと思います。ただし、コードが実行されると、プログラムは常に最後に入力された色を選択し、その色のみを表示します。コード:

-(void)CreateEnemy:(ccTime)dt{
CCSprite *Enemy;
int a;
if (colorArray != nil) {
    a = arc4random()% [colorArray count];
}
int y = [[colorArray objectAtIndex:a] integerValue];
if (y == 1) {
    Enemy = [CCSprite spriteWithFile:@"GreenBall.png"];
    int x = arc4random()%320;
    Enemy.position = ccp(x, 530);
    id action = [CCMoveTo actionWithDuration:3 position:ccp(x, -30)];
    [Enemy runAction:[CCSequence actions:action, [CCCallFuncN actionWithTarget:self selector:@selector(spriteMoveFinished:)], nil]];
    [enemyArray addObject:Enemy];
    [self addChild:Enemy z:2 tag:1];
    NSLog(@"Green Enemy Attack!!");
}
else if (y == 2) {
    Enemy = [CCSprite spriteWithFile:@"YellowBall.png"];
    int x = arc4random()%320;
    Enemy.position = ccp(x, 530);
    id action = [CCMoveTo actionWithDuration:3 position:ccp(x, -30)];
    [Enemy runAction:[CCSequence actions:action, [CCCallFuncN actionWithTarget:self selector:@selector(spriteMoveFinished:)], nil]];
    [enemyArray addObject:Enemy];
    [self addChild:Enemy z:2 tag:1];
    NSLog(@"Yellow Enemy Attack!!");
}
else if (y == 3) {
    Enemy = [CCSprite spriteWithFile:@"RedBall.png"];
    int x = arc4random()%320;
    Enemy.position = ccp(x, 530);
    id action = [CCMoveTo actionWithDuration:3 position:ccp(x, -30)];
    [Enemy runAction:[CCSequence actions:action, [CCCallFuncN actionWithTarget:self selector:@selector(spriteMoveFinished:)], nil]];
    [enemyArray addObject:Enemy];
    [self addChild:Enemy z:2 tag:1];
    NSLog(@"Red Enemy Attack!!");
}
}

Yはランダムに選択された色である必要がありますが、そうではありません。

4

1 に答える 1

1

の:

if (colorArray != nil) {
   a = arc4random()% [colorArray count];
}
int y = [[colorArray objectAtIndex:a] integerValue];

発生する可能性が最も高いのは、[colorArray count]期待する値がないため、arc4random0 (または限られた値のセット) のみが返されることです。

の値を計算する直前に NSLog トレースを追加すると、aの値を評価できます[colorArray count]

于 2012-12-25T17:39:15.173 に答える