0

こんにちは、私はあなたが青いボールであり、赤いボールに触れさせずに移動する必要があるアプリを作成しています。速度が毎秒増加するようにするにはどうすればよいか考えていました。次のようなものがあります。

- (void)viewDidLoad {
[super viewDidLoad];

//(X Speed, Y Speed)
pos = CGPointMake(13.0,8.0);
pos2 = CGPointMake(10.0,9.0);

}


- (IBAction)restart:(id)sender {

     [restartbutton setHidden:YES];
     [menubutton setHidden:YES];
     randomMain = [NSTimer scheduledTimerWithTimeInterval:(0.03) target:self selector:@selector(onTimer) userInfo:nil repeats:YES];

}

- (IBAction)start:(id)sender {    
     [startbutton setHidden:YES];
     [restartbutton setHidden:YES];
     [menubutton setHidden:YES];
     randomMain = [NSTimer scheduledTimerWithTimeInterval:(0.03) target:self selector:@selector(onTimer) userInfo:nil repeats:YES];

}

- (IBAction)menu:(id)sender {

     [self.navigationController popViewControllerAnimated:YES];

}

- (void)onTimer {

    [self checkCollision];

    enemy.center = CGPointMake(enemy.center.x+pos.x, enemy.center.y+pos.y);
    enemy2.center = CGPointMake(enemy2.center.x+pos2.x, enemy2.center.y+pos2.y);

    if (enemy.center.x > 320 || enemy.center.x < 0) 
        pos.x = -pos.x;
    if (enemy.center.y > 480 || enemy.center.y < 0) 
        pos.y = -pos.y;
    if (enemy2.center.x > 320 || enemy2.center.x < 0) 
        pos2.x = -pos2.x;
    if (enemy2.center.y > 480 || enemy2.center.y < 0) 
        pos2.y = -pos2.y;

}

- (void)checkCollision {

    if (CGRectIntersectsRect(player.frame, enemy.frame)) {

        [randomMain invalidate];
        [startbutton setHidden:YES];
        [restartbutton setHidden:NO];
        [menubutton setHidden:NO];

        CGRect frame = [player frame];
        frame.origin.x = 135.0f;
        frame.origin.y = 205.0f;
        [player setFrame:frame];

        CGRect frame2 = [enemy frame];
        frame2.origin.x = 135.0f;
        frame2.origin.y = 20.0f;
        [enemy setFrame:frame2];

        CGRect frame3 = [enemy2 frame];
        frame3.origin.x = 135.0f;
        frame3.origin.y = 390.0f;
        [enemy2 setFrame:frame3];

        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"You Lost!" 
                                                        message:[NSString stringWithFormat:@"Better Luck Next Time"]     
                                                       delegate:nil 
                                              cancelButtonTitle:@"Cancel" 
                                              otherButtonTitles:nil];
    [alert show];

    }
}

 - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {

    UITouch *myTouch = [[event allTouches] anyObject];
    player.center = [myTouch locationInView:self.view];

}

 - (void)viewDidUnload
 {
     [super viewDidUnload];
     // Release any retained subviews of the main view.
 }


@end
4

1 に答える 1

0

あなたが私たちに与えてくれた、常に呼び出されている唯一のメソッドは onTimer のようです。0.01 などの非常に小さな加速度定数を設定してはいかがでしょうか。次に、accelerated というメソッドを作成し、次のようなコードを挿入します。

pos = CGPointMake(pos.x + ACC_CONSTANT, pos.y + ACC_CONSTANT);
pos2 = CGPointMake(pos2.x + ACC_CONSTANT, pos.y + ACC_CONSTANT);

[self checkCollision] の後に加速を呼び出します。

次に、必要な結果が得られるまで、加速度定数をいじってみます。

毎秒増加するだけのステップ関数にしたい場合は、NSTimer iVar を使用する必要がありますが、これもかなり簡単です。このinit関数を使用して、1秒間隔でインスタンス化するだけです

scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:

次に、ターゲットセレクターとして @selector(accelerate) を呼び出します。

于 2012-07-06T17:13:53.760 に答える