2016-08-01 24 views
2

Dies ist mein erster Beitrag. Ich habe überall nach einer Antwort gesucht und es scheint, dass ich es richtig mache, aber es scheint einfach nicht zu funktionieren.Swift SKAction.waitForDuration zu schnell ausgeführt

Ich versuche eine Kampfsequenz zwischen zwei Knoten in Swift auszuführen. Nachdem jeder Knoten angreift, sollte er auf die angegebene Angriffsgeschwindigkeit warten, bevor er erneut angreift.

Hier ist mein Code für die Kampfsequenz:

func playerMonsterCollision(player: Character, monster: Character) { 
    player.removeAllActions() 
    monster.removeAllActions() 

    let playerFight = player.dealDamage(monster) 
    let playerWait = SKAction.waitForDuration(player.attackSpeed) 
    let monsterFight = monster.dealDamage(player) 
    let monsterWait = SKAction.waitForDuration(monster.attackSpeed) 

    player.runAction(SKAction.repeatActionForever(SKAction.sequence([playerFight, playerWait]))) 
    monster.runAction(SKAction.repeatActionForever(SKAction.sequence([monsterFight, monsterWait]))) 
} 

Und das ist die dealDamage Funktion, die aufgerufen wird:

func dealDamage(target: Character) -> SKAction { 
    let action = SKAction.runBlock() 
    { 
     if (target.health > 0 && self.health > 0) 
     { 
      let damageDelt = self.calcAttack() 
      target.takeDamage(damageDelt) 
      print("Damage delt: \(damageDelt), \(target.name!) health: \(target.health).") 
     } 
     else 
     { 
      if self.name! == "Monster" 
      { 
       if !self.isAlive() 
       { 
        self.removeFromParent() 
       } 
      } 
      else 
      { 
       if !target.isAlive() 
       { 
        target.removeFromParent() 
       } 
      } 
     } 
    } 

    return action 
} 

Die player.attackSpeed ​​ist ein doppeltes, 3.0 und Monster. attackSpeed ​​ist auch ein Double, 3.5. Soweit ich das verstehe, würde das Double eine Zeit in Sekunden darstellen, aber wenn ich mein Programm benutze, scheint es zwischen den Ausführungen weniger als eine halbe Sekunde zu dauern.

Antwort

0

Das Problem gefunden!

Ich tat tatsächlich alles richtig, aber danke an this answer Ich fand heraus, dass ich die Geschwindigkeit Eigenschaft in der Erstellung meiner Objekte geändert hatte. Sobald ich es behoben habe, wurde mein Code wie erwartet ausgeführt. Ein paar andere Probleme mit der Geschwindigkeit sind aufgetaucht, aber sie werden jetzt leicht genug zu beheben sein, da ich weiß, was sie verursacht hat!

Hoffentlich hilft dies anderen, die über ein ähnliches Problem mit Dingen stolpern, die zu schnell (oder zu langsam) ausgeführt werden. Achten Sie darauf, die SKSpriteNode.speed-Eigenschaft nicht versehentlich zu ändern.