Swift SKAction.waitForDuration 执行速度太快

Swift SKAction.waitForDuration Executing Too Fast

这是我的第一个 post。我到处寻找答案,看起来我做对了,但它似乎不起作用。

我正在尝试在 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,monster.attackSpeed 也是双精度,3.5。据我了解,double 表示以秒为单位的时间,但是,当我 运行 我的程序时,两次执行之间的时间似乎不到半秒。

找到问题了!

我确实做的一切都是正确的,但是感谢 我发现我已经改变了创建对象的速度 属性。一旦修复它,我的代码就会按预期执行。出现了其他一些与速度相关的问题,但现在我知道是什么原因造成的,这些问题很容易解决!

希望这能帮助那些偶然发现执行速度太快(或太慢)的类似问题的其他人。注意不要无意中更改 SKSpriteNode.speed 属性.