2016-08-01 36 views
2

這是我的第一篇文章。我到處尋找答案,看起來我做得對,但它似乎沒有工作。Swift SKAction.waitForDuration太快執行

我想在Swift中的兩個節點之間執行戰鬥序列。在每個節點攻擊之後,它應該在再次攻擊之前等待其指定的攻擊速度持續時間。

這裏是我的戰鬥序列碼:

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

這是被稱爲dealDamage功能:

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 
} 

的player.attackSpeed是雙,3.0,和怪物。 attackSpeed也是雙倍,3.5。據我所知,double會代表幾秒鐘的時間,然而,當我運行我的程序時,似乎在執行之間不到半秒。

回答

0

發現問題了!

我的確在做所有事情都是正確的,但是謝謝this answer我發現我在創建對象時改變了速度屬性。一旦我修好了,我的代碼就按預期執行了。還有一些與速度有關的問題出現了,但是現在我知道是什麼原因造成它們會很容易修復!

希望這可以幫助那些在執行速度太快(或太慢)的事情時遇到類似問題的人。小心不要無意中更改SKSpriteNode.speed屬性。