在ccTouchesMoved /暂停计时器/恢复计时器 - Cocos2d中安排更新一

时间:2011-06-08 00:40:16

标签: iphone cocos2d-iphone

我只是想在ccTouchesMoved中安排一次更新方法,但是当我添加这个

if (isRotating == YES)
        {
            gTimer = 20;
            [self schedule:@selector(g:) interval:1];
        }

进入ccTouchesMove,每次移动触摸时都会调用它。有没有办法将它保存在ccTouchesMoved中并且只调用一次?

isRotatingccTouchesMoved中设置为YES。

代码:

- (void)g:(ccTime)delta
{
    gTimer--;

    if (gTimer == 0 && isRotating == YES)
    {
        [self unschedule:@selector(g:)];
    }
}

我想做的就是旋转精灵一段固定的间隔,然后在计时器为0时将其删除,但我只想在触摸当前正在旋转精灵的情况下将其删除。

这里是暂停/恢复计时器的地方。如果玩家开始旋转精灵然后抬起他们的手指,计时器应该暂停,当他们再次触摸/旋转精灵时,计时器应该恢复。

如果我的解释不清楚,请随时请我详细说明。

计时器方法:

在.h

ccTimer gTimer;

在.m

- (void)g:(ccTime)delta
{
    gTimer--;

    if (gTimer == 0 && isRotating == YES)
    {
        [self unschedule:@selector(g:)];
    }
}

另外,我用

设置了计时器
if (isRotating == YES)
        {
            gTimer = 20;
            [self schedule:@selector(g:) interval:1];
        }

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

把BOOL放在你的班级中......并浮动myTimer ......

-(void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    touched = YES;
}
-(void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    isRotating = YES;

    if(touched && isRotating)
    {
       gTimer = 20;
           [self schedule:@selector(g:) interval:0.03];
    }   
  }
-(void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
    touched = NO;
    [self unschedule:@selector(g:)];
}


- (void)g:(ccTime)delta
{
    myTimer +=delta;

    if (myTimer >= gTimer && isRotating == YES)
    {
        [self unschedule:@selector(g:)];
    }
}

答案 1 :(得分:0)

暂停我刚刚使用的计时器

[self unschedule:@selector(g:)];

然后恢复它我用

[self schedule:@selector(g:)];

另外,为了安排ccTouchesMoved中的更新,我只是检查手指是否在没有抬起的情况下停止移动。