我试图在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。据我了解,双倍代表的是一个以秒为单位的时间,然而,当我运行我的程序时,执行之间似乎不到半秒。
答案 0 :(得分:0)
发现了问题!
我确实做的一切都是正确的,但是谢谢this answer我发现我在创建对象时更改了speed属性。一旦我修复它,我的代码按预期执行。还出现了一些与速度相关的其他问题,但是现在它们很容易解决,因为我知道是什么导致了它!
希望这可以帮助那些遇到类似问题的人执行太快(或太慢)的事情。注意不要无意中更改SKSpriteNode.speed属性。