在计时器完成其工作之前停止再次创建计时器

时间:2014-08-20 23:48:54

标签: ios objective-c cocoa-touch

我试图制作一种免费的亚军游戏。每次点击屏幕时,我都会通过将整数设置为30左右来进行角色跳转,并使用CGPointMake()将角色向上移动到屏幕上。然后当玩家点击屏幕时我有一个计时器启动,该屏幕将角色拉下来直到他到达某一点(y = 260)。然后计时器失效并且角色的向下运动停止。

这种情况一直持续,并且在角色到达y = 260之前点击屏幕,效果非常好。这让他挺身而出,速度非常快,而且他并没有像他应该的那样停在y = 260。这是我认为导致问题的代码:

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


    playerMoving = 33;

    gravity = [NSTimer scheduledTimerWithTimeInterval:.2 
                                               target:self 
                                             selector:@selector(playerJump) 
                                             userInfo:nil 
                                              repeats:YES];


}

每当我双击屏幕时,计时器再次被激活,即使它已被激活,这就是我认为导致问题的原因。

有没有办法不让玩家第二次点击屏幕直到角色达到y = 260(所以玩家基本上不能跳过双跳)?

1 个答案:

答案 0 :(得分:0)

如果计时器已存在,请不要创建计时器。完成计时器后,取出变量,并在再次创建之前检查它。

- (void)playerJump:(NSTimer *)tim
{
    // Do stuff...

    if( /* Done repeating */ ){
        [gravity invalidate];
        gravity = nil;
    }
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
   playerMoving = 33;
   if( !gravity ){
        gravity = [NSTimer scheduledTimerWithTimeInterval:.2 
                                                   target:self 
                                                 selector:@selector(playerJump:)
                                                 userInfo:nil 
                                                  repeats:YES];
   }
}