Swift SKAction.waitForDuration执行太快

时间:2016-08-01 00:55:20

标签: swift wait skaction

这是我的第一篇文章。我到处寻找答案,看来我做得对,但它似乎无法正常工作。

我试图在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。据我了解,双倍代表的是一个以秒为单位的时间,然而,当我运行我的程序时,执行之间似乎不到半秒。

1 个答案:

答案 0 :(得分:0)

发现了问题!

我确实做的一切都是正确的,但是谢谢this answer我发现我在创建对象时更改了speed属性。一旦我修复它,我的代码按预期执行。还出现了一些与速度相关的其他问题,但是现在它们很容易解决,因为我知道是什么导致了它!

希望这可以帮助那些遇到类似问题的人执行太快(或太慢)的事情。注意不要无意中更改SKSpriteNode.speed属性。