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