我正在尝试制作一个应用程序,用户可以在其中按下按钮来提高某些技能的水平。但是,我使用的是“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/