0

Objective-Cに関しては初心者なので、できるだけ簡単に答えてください。

これは、Xcode 4.5 で作成された Pong ゲームの m ファイルです。メソッド viewDidLoad ではタイマーです。私の問題は、間隔を変更することです(現在、フロートギャップ= 0.05)ので、ボールはどんどん速くなります..別の場所に新しいタイマーを作成し、繰り返しをYESに設定しないようにする必要があると思います. しかし、私はそれをどこに置き、フロートギャップをどうするかわかりません。

私の言いたいことを理解していただければ幸いです。

PongOne.m:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    UITouch *touch = [[event allTouches] anyObject];
    CGPoint location = [touch locationInView:touch.view];
    paddle.center = CGPointMake(location.x, paddle.center.y);
}
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
    [self touchesBegan:touches withEvent:event];
}
-(void)CPU {
    ball.center = CGPointMake(ball.center.x + xgain, ball.center.y + ygain);
    if (ball.center.x < 15)
        xgain = abs(xgain);

    if (ball.center.y < 15)
        ygain = abs(ygain);
        gap = gap + 0.01;

    if (ball.center.x > 305)
        xgain = -abs(xgain);

    if (ball.center.y > 445){
        score++;
        if (score <= 2){
            ball.center = CGPointMake(100, 100);
            label1.text = [NSString stringWithFormat:@"%d", score];
        } else {
            [timer invalidate];
            timer = nil;
            [self performSegueWithIdentifier:@"byta1" sender:self];
        }
    }
    if (CGRectIntersectsRect(ball.frame, paddle.frame))
        ygain = -abs(ygain);
    if (CGRectIntersectsRect(ball.frame, paddle2.frame))
        ygain = abs(ygain);
    paddle2.center = CGPointMake(ball.center.x, paddle2.center.y);
}
- (void)viewDidLoad {
    [super viewDidLoad];
    timer = [NSTimer scheduledTimerWithTimeInterval:gap target: self selector:@selector(CPU)         userInfo:nil repeats:YES];
    xgain = 10;
    ygain = 10;
}
4

1 に答える 1

2

[timer invalidate]変更したいときに使用して現在のタイマーを削除し、 で行うように新しいタイマーを作成できますviewDidLoad。または、繰り返さないようにCPUしてから、現在の間隔が何であれ、フレームごとに新しいものを作成します。NSTimerとにかく、どのような種類の実行ループもお勧めしません。また、1 つのオブジェクトの速度を変更するためだけに実行ループ全体のタイミングを変更するのは悪い考えだと思います。代わりに、フレームごとに移動量を変更する必要があります。自分自身を変えてみません{x,y}Gainか?

于 2013-02-10T22:45:20.667 に答える