2016-08-01 7 views
2

это мой первый пост. Я везде искал ответ, и кажется, что я делаю это правильно, но он просто не работает.Swift SKAction.waitForDuration Выполняется слишком быстро

Я пытаюсь выполнить боевую последовательность между двумя узлами в Свифт. После того, как каждый узел атакует, он должен дождаться указанной скорости атаки до повторной атаки.

Вот мой код для боевой последовательности:

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. Насколько я понимаю, двойник будет представлять собой время в секундах, однако, когда я запускаю свою программу, это может быть меньше половины секунды между выполнением.

ответ

0

Обнаружена проблема!

Я действительно делал все правильно, но спасибо this answer Я понял, что изменил свойство скорости при создании моих объектов. Как только я его исправил, мой код выполнялся, как и ожидалось. Появились несколько других проблем, связанных с скоростью, но их будет достаточно легко исправить, если я знаю, что вызвало это!

Надеюсь, это поможет другим, которые спотыкаются о подобной проблеме, когда вещи выполняются слишком быстро (или слишком медленно). Будьте осторожны, чтобы не непреднамеренно изменить свойство SKSpriteNode.speed.