如何为CGpoint指定UItapGesture识别器

时间:2016-04-26 20:36:53

标签: swift timer action uigesturerecognizer

我正在创建一个游戏广告,我很难创建一个跳转按钮。我已经创建了跳跃和跌倒SKaction序列,这在这里是完美的工作方式。

func JumpArrow () {
    self.addChild(jumpArrow)
    jumpArrow.position = CGPointMake(60, 145)
    jumpArrow.xScale = 1
    jumpArrow.yScale = 1
}

func heroJumpMovement () {
    let heroJumpAction = SKAction.moveToY(hero.position.y + 85, 
    duration: 0.5)
    let heroFallAction = SKAction.moveToY(hero.position.y , duration:
    0.5)

    let jumpWait:SKAction = SKAction.waitForDuration(CFTimeInterval(1)) 

    let heroMovementSequence:SKAction = 
    SKAction.sequence([heroJumpAction, heroFallAction ,jumpWait])
    hero.runAction(heroMovementSequence)

}
override func touchesBegan(touches: Set<UITouch>, withEvent
event:UIEvent?) {

    for touch in touches {

        let location = touch.locationInNode(self)
        let node = nodeAtPoint(location)

if node == jumpArrow {

           heroJumpMovement()
 }
但是,我有一个问题。如果你快速点击按钮,播放器将飞离屏幕。我希望我可以创建一个UItapGestureRecognizer并为点击创建一个延迟,这样你就不能每秒点击2-4次按钮,你只能点击一次。如果这是错误的方法,请告诉我

1 个答案:

答案 0 :(得分:1)

添加延迟将是错误的方法。

相反,在你的 touchesBegan 函数中,在你调用 heroJumpMovement()之前,你应该检查你的玩家是否在地面

另一种选择是检查最后一次跳跃SKActionSequence是否已完成

要做到这一点,你会有这样的事情(未检查代码):

var canJump = true; // Variable will be true if we can jump

func JumpArrow () {
    self.addChild(jumpArrow)
    jumpArrow.position = CGPointMake(60, 145)
    jumpArrow.xScale = 1
    jumpArrow.yScale = 1
}

func heroJumpMovement () {
    let heroJumpAction = SKAction.moveToY(hero.position.y + 85, 
    duration: 0.5)
    let heroFallAction = SKAction.moveToY(hero.position.y , duration:
    0.5)

    let jumpWait:SKAction = SKAction.waitForDuration(CFTimeInterval(1)) 

    let heroMovementSequence:SKAction = 
    SKAction.sequence([heroJumpAction, heroFallAction ,jumpWait])
canJump = false; // We are about to jump so set this to false
    hero.runAction(heroMovementSequence, completion: {canJump = true;}) // Set the canJump variable back to true after we have landed

}
override func touchesBegan(touches: Set<UITouch>, withEvent
event:UIEvent?) {

    for touch in touches {

        let location = touch.locationInNode(self)
        let node = nodeAtPoint(location)

if node == jumpArrow {
          if (canJump) { // Make sure we are allowed to jump
           heroJumpMovement()
          }
 }

注意 canJump 变量。