1

現在、Player と Ball (Monster クラスの息子) の 2 つのクラスを使用しています。方向パッドを使用すると、画面上でプレーヤーを動かすことができ、ボールは画面内で跳ね続けます。ViewController には、プレイヤーの NSMutableArray とボールの NSMutableArray があります。

    Player *m = [[Car alloc]init];
    [players addObject:m];
    [self.view addSubview:m.image];

    joypad = [[Joypad alloc] initWithPlayer:players[0]];
    [self.view addSubview: joypad.pad];
    [self.view addSubview:joypad.movingPad];


    monsters = [NSMutableArray arrayWithCapacity:MAX];
    for(int i = 0; i < MAX; ++i)
    {
        int radius = rand()%100;
        int deltax = rand()%5 + 1;
        int deltay = rand()%5 +1;
        Monster *ball = [[Ball alloc] initWithRadius:radius andDX:deltax DY:deltay];
        [self.view addSubview:ball.image];
        [ball startMoving];
    }

ボールとボールとボールとプレーヤーの衝突を検出するにはどうすればよいですか? ここにリンクの説明を入力

VievController の viewDidLoad でこのメソッド (checkCllisions) を呼び出してみましたが、メッセージは表示されません。

-(void) checkCollisions{
    [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(collisions) userInfo:nil repeats:YES];
}

-(void) collisions{

    for(int i = 0; i < [players count]; i++){
        Player *p = players[i];
        CGRect f = CGRectMake(p.image.frame.origin.x, p.image.frame.origin.y, p.image.frame.size.width, p.image.frame.size.height);
        for (int k = 0; k < [monsters count]; i++){
            Monster *m = monsters[i];
            CGRect fm = CGRectMake(m.image.frame.origin.x, m.image.frame.origin.y, m.image.frame.size.width, m.image.frame.size.height);
            if(CGRectIntersectsRect(f, fm))
                NSLog(@"collision");
        }
    }
}
4

1 に答える 1

0

collisionメソッドの内側のループには 2 つのエラーがありkます。imonsters[i]monsters[k]

CGRects の割り当ては単純化できることに注意してください。

-(void) collisions{
    for(int i = 0; i < [players count]; i++){
        Player *p = players[i];
        CGRect f = p.image.frame;
        for (int k = 0; k < [monsters count]; k++){
            Monster *m = monsters[k];
            CGRect fm = m.image.frame;
            if(CGRectIntersectsRect(f, fm))
                NSLog(@"collision");
        }
    }
}
于 2013-05-24T19:02:35.940 に答える