锁定和解锁SKAction,因此一次只能运行一次

时间:2014-03-09 22:52:56

标签: objective-c cocoa-touch sequence sprite-kit

我需要在第一个序列完成之前保持序列多次触发。我试图使用布尔值锁定序列但是不成功。

这是我尝试过的。

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    if (self.lockJump == false) {
        self.lockJump = true;
        SKAction *jumpUp = [SKAction moveByX: 0 y: 70.0 duration: 0.45];
        SKAction *jumpDown = [SKAction moveByX: 0 y: -70.0 duration: 0.25];
        [self.player runAction:[SKAction sequence:@[jumpUp, jumpDown]]];
        self.lockJump = false;
    }
}

我推测,在调用jumpDown时,会认为序列已完成,而不是终止。这意味着跳转在完成之前解锁。我认为这可以通过检查上次调用时间和当前时间之间的时间并将其设置为等于.7秒来实现,但不确定如何最有效地成功解决此问题。

1 个答案:

答案 0 :(得分:2)

一种解决方案是使用+[SKAction runBlock:]在行动序列中添加“解锁”作为最后一步:

SKAction * unlock = [SKAction runBlock:^{ self.lockJump = NO; }];
[self.player runAction:[SKAction sequence:@[jumpUp, jumpDown, unlock]]];

(旁白:对YES使用NOBOOL。)