ios - SpriteKit 检测按住标签

标签 ios sprite-kit skspritenode

我正在尝试制作一个应用程序,用户可以在其中按下按钮来提高某些技能的水平。但是,我使用的是“touchesBegan”方法,如果用户想将技能升级 25 点,则用户必须点击标签 25 次。这是我目前用于检测用户是否触摸了 Sprite 的代码。

-(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];
  }
}

有没有办法在 Sprite 或标签上实现按住并按下手势?所以用户只要按住升级按钮,它就会递增很多次,而不是连续点击?

感谢任何和所有的建议!

最佳答案

在封闭类中保留一个引用技能按钮的成员,然后在按钮上开始一个 Action 以在 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]; 停止节点的 Action ,无论位置在哪里(从那时起,用户可以滑动他的手指和位置会有所不同)

不确定是否是最干净的解决方案,但这应该适合您

关于ios - SpriteKit 检测按住标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24044239/

相关文章:

ios - 如何使用 Swift 选择器?选择器不断将结果变为 `Type has no member`

ios - 使用 arc4Random 设置 Sprite 垂直位置的限制

ios - 一旦有完整的行,如何删除 SKSpriteNode? (像俄罗斯方 block )

ios - 如何将 UILabel 放在 SKSpriteNode 后面

swift - 从场景中移除后如何停止 SKSpriteNode 的音频(Swift)?

ios - 我正在尝试使用 xCode 4.4 构建存档应用程序,但出现此错误

iOS 8 自动单元格高度 - 无法滚动到最后一行

ios - 如何使用 swift 实现点击以专注于条形码扫描器应用程序?

ios - SpriteKit : suggestions for rounding corners of unconventional grid?

ios - iPhone 离线 Web 应用程序和 Safari 是否共享相同的 HTML5 应用程序缓存?