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 属性.
这是我的第一个 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 属性.