Dies ist mein erster Beitrag. Ich habe überall nach einer Antwort gesucht und es scheint, dass ich es richtig mache, aber es scheint einfach nicht zu funktionieren.Swift SKAction.waitForDuration zu schnell ausgeführt
Ich versuche eine Kampfsequenz zwischen zwei Knoten in Swift auszuführen. Nachdem jeder Knoten angreift, sollte er auf die angegebene Angriffsgeschwindigkeit warten, bevor er erneut angreift.
Hier ist mein Code für die Kampfsequenz:
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])))
}
Und das ist die dealDamage Funktion, die aufgerufen wird:
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
}
Die player.attackSpeed ist ein doppeltes, 3.0 und Monster. attackSpeed ist auch ein Double, 3.5. Soweit ich das verstehe, würde das Double eine Zeit in Sekunden darstellen, aber wenn ich mein Programm benutze, scheint es zwischen den Ausführungen weniger als eine halbe Sekunde zu dauern.