2

2 NSTimer を実行してみました。うまくいかないことに気がつきました。2 つの NSTimer を実行する可能性はありますか? ボールが動いている間にカウンターを始めようとしました。しかし、私がそれを開始すると、カウンターが次の秒に来ると敵のボールが最初から開始されます。もちろん、このゲームはまだ終わっていません。

ここに私の「プロジェクト」があります:

//.h
@interface ViewController : UIViewController {

    IBOutlet UIButton *startButton;
    NSTimer *randomMain;
    CGPoint pos; 
    IBOutlet UIImageView *enemy;
    IBOutlet UIImageView *player;

    IBOutlet UIButton *startCounter;

    IBOutlet UILabel *seconds;
    NSTimer *timer;
    int MainInt;
}

-(IBAction)start2:(id)sender;

- (IBAction)start;

//.m

@implementation ViewController

-(void)countup {
    MainInt += 1;
    seconds.text = [NSString stringWithFormat:@"%i", MainInt];
}

-(IBAction)start2:(id)sender {
    MainInt = 0;
    timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(countup)userInfo:nil repeats:YES];   
}

- (IBAction)start {
    [startButton setHidden:YES];
    randomMain = [NSTimer scheduledTimerWithTimeInterval:(0.03) target:self selector: @selector(onTimer) userInfo:(nil) repeats:YES];
}

-(void)onTimer{   
    [self checkCollision];

    enemy.center = CGPointMake(enemy.center.x+pos.x,enemy.center.y+pos.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;
}

- (void)checkCollision {

    if( CGRectIntersectsRect(player.frame,enemy.frame))
    {
        [randomMain invalidate];
        [startButton setHidden:NO];

        CGRect frame = [player frame];
        frame.origin.x = 137.0f;
        frame.origin.y = 326.0;
        [player setFrame: frame];

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

       UIAlertView *alert =[[UIAlertView alloc]initWithTitle:@"You hit the ball!" message: [NSString stringWithFormat:@"Try it again!"] delegate:nil cancelButtonTitle:@"Dismiss" otherButtonTitles:nil];
        [alert show];
    }
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *myTouch = [[event allTouches] anyObject];
    player.center = [myTouch locationInView:self.view];    
}

-(void)viewDidLoad {   
    [super viewDidLoad];
    // X Speed Y Speed
    pos = CGPointMake(5.0,4.0);
}
4

1 に答える 1

0

別のスレッドで 2 番目のタイマーを実行してみてください。つまり、別のスレッドで実行される関数に書き込んでください。2 番目のタイマーを設定している関数を呼び出します。

于 2012-12-21T14:15:19.927 に答える