【问题标题】:Prevent Cocos2D touches during animation?在动画期间防止 Cocos2D 触摸?
【发布时间】:2011-11-19 00:20:54
【问题描述】:

在此动画中:

    - (void)ccTouchesBegan:(NSSet*)touches withEvent:(UIEvent*)event {
    self.isTouchEnabled = NO;
    if (scoreLabel.opacity == 225) {
        NSLog(@"fadeOut");
        CCSequence *fadeOut = [CCSequence actions:[CCFadeOut actionWithDuration:0.5], [CCCallFuncN actionWithTarget:self 
        selector:@selector(enableTouches)], nil];
        [scoreLabel runAction:fadeOut];
        [livesLabel runAction:[[fadeOut copy] autorelease]];
    }
    else {
        NSLog(@"fadeIn");
        CCSequence *fadeIn = [CCSequence actions:[CCFadeIn actionWithDuration:0.5], [CCCallFuncN actionWithTarget:self 
        selector:@selector(enableTouches)], nil];
        [scoreLabel runAction:fadeIn];
        [livesLabel runAction:[[fadeIn copy] autorelease]];
         }
}

我试图简单地淡出/淡入标签。但问题是,我希望确保在标签制作动画时不会调用此方法。

如果您查看代码,我会尝试通过调用此方法来做到这一点:

    - (void)enableTouches {
    NSLog(@"ET");
        self.isTouchEnabled = YES;
}

但它似乎不起作用。如果我在标签动画时触摸屏幕,它会在中途打乱动画并且不会做我想要的。

有什么想法吗?

谢谢!

【问题讨论】:

    标签: ios cocos2d-iphone touches


    【解决方案1】:

    如果有人遇到同样的问题,我最终会这样做:

    - (void)ccTouchesBegan:(NSSet*)touches withEvent:(UIEvent*)event
    {
        self.isTouchEnabled = NO;
    
        if(label1.opacity == 0 )
        {
            CCFadeIn* fadeIn = [CCFadeIn actionWithDuration:0.5];
            CCCallBlock* fadeCompleted = [CCCallBlock actionWithBlock:^{ self.isTouchEnabled = YES; }];     
    
            [label1 runAction:[CCSequence actions:fadeIn, fadeCompleted, nil]];
            [label2 runAction:[[fadeIn copy] autorelease]];
        }
        else
        {
            CCFadeOut* fadeOut = [CCFadeOut actionWithDuration:0.5];
            CCCallBlock* fadeCompleted = [CCCallBlock actionWithBlock:^{ self.isTouchEnabled = YES; }];     
    
            [label1 runAction:[CCSequence actions:fadeOut, fadeCompleted, nil]];
            [label2 runAction:[[fadeOut copy] autorelease]];
        }
    }
    

    【讨论】:

    • 另一种方法是使用单独的 BOOL 变量来控制标签动画时是否忽略新的触摸。
    【解决方案2】:

    如果您不知道,您可以将标签分配给操作,就像您将标签分配给节点一样。然后,您可以在运行该操作的对象上调用 getActionByTag: 以获取 nil 或指向该操作的指针。通过检查返回值是 nil 还是动作,您将知道您正在寻找的特定动作/动画是否正在播放。这样你就可以在没有额外变量的情况下做到这一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-22
      • 2016-08-23
      • 2011-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多