2016-04-26 12 views
1

Ich erstelle eine Spielanzeige Ich habe es schwer, einen Sprungknopf zu erstellen. Ich habe den Sprung nach oben und unten SKaction Sequenz erstellt, die perfekt funktioniert hier ist, wie es funktioniert.Wie erstelle ich einen UItapGesture Recognizer zu einem CGpoint für eine Schaltfläche

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() 
} 

jedoch habe ich ein Problem. Wenn Sie schnell auf die Schaltfläche tippen, fliegt der Player vom Bildschirm. Ich hoffe, dass ich einen UItapGestureRecognizer erstellen und eine Verzögerung für das Tippen erstellen kann, so dass Sie nicht 2-4 Mal pro Sekunde auf die Schaltfläche tippen können, die Sie nur einmal tippen können. Wenn dies der falsche Weg ist, bitte sagen Sie mir

Antwort

1

Hinzufügen einer Verzögerung wäre der falsche Weg, um darüber zu gehen.

Stattdessen in Ihrer touchesBegan Funktion, bevor Sie heroJumpMovement() rufen Sie sollten überprüfen, ob Ihre Spieler auf dem Boden ist oder nicht.

Eine andere Alternative wäre zu überprüfen, ob der letzte Sprung SKActionSequence abgeschlossen hat oder nicht.

die oben zu tun, Sie so etwas wie dieses (Code nicht überprüft) haben würde:

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() 
      } 
} 

Beachten Sie die canJump variabel.

+0

danke, diese Methode hat perfekt funktioniert – gkolman