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);
}