SpriteKit检测按住标签

时间:2014-06-04 17:51:52

标签: ios sprite-kit skspritenode

我正在尝试创建一个应用,用户可以按下按钮来提高某些技能水平。但是,我正在使用" touchesBegan"方法,如果用户想要将技能升级25分,则用户必须单击标签25次。这是我目前检测用户是否触摸了精灵的代码。

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
  UITouch *touch = [touches anyObject];
  CGPoint location = [touch locationInNode:self];
  SKNode *node = [self nodeAtPoint:location];
  if([node.name isEqualTo:@"red-upgrade"]){
    if(_xp >= pow(_rpower+1, 2)){
        _rpower ++;
        _xp -= pow(_rpower, 2);
    }
    _rpowerlabel.text = [NSString stringWithFormat:@"Red Power: %i", _rpower];
  }
}

有没有办法在精灵或标签上实现保持和按下手势?因此,用户只需按住升级按钮即可增加多次而不是连续点击?

赞赏任何和所有建议!

1 个答案:

答案 0 :(得分:1)

让一个成员引用封闭类中的技能按钮,然后在按钮上启动一个操作以增加touch begin方法中所需的值:

  if([node.name isEqualTo:@"red-upgrade"]){
            [self.skillButton runAction:[SKAction repeatForever:[SKAction sequence:@[[SKAction waitForDuration:0.5],
                                                                                 [SKAction runBlock:^{
                if(self.xp >= pow(self.rpower+1, 2)){
                    self.rpower ++;
                    self.xp -= pow(self.rpower, 2);
                }
                self.rpowerlabel.text = [NSString stringWithFormat:@"Red Power: %i", self.rpower]
            }]]]]];
  }

我使用了一个小延迟,否则值会非常快地增加(除非你想要的)。

touchEnd方法中停止节点与[self.skillButton removeAllActions];的操作,无论位置在哪里(从那时起,用户可以滑动他的手指,位置也会不同)

不确定最干净的解决方案是否适用于您