2016-08-01 1 views
2

이것은 내 첫 번째 게시물입니다. 나는 답을 찾기 위해 어디에서나 보았고, 나는 올바르게하고있는 것처럼 보였지만, 제대로 작동하지 않는 것 같습니다.Swift SKAction.waitForDuration 너무 빨리 실행 중

저는 스위프트에서 두 노드 사이의 전투 순서를 실행하려고합니다. 각 노드가 공격 한 후에 다시 공격하기 전에 지정된 공격 속도 기간을 기다려야합니다.

다음은 전투 시퀀스 내 코드입니다 :

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, 그리고 괴물이다. attackSpeed도 3.5 배입니다. 내가 이해하는 한, 두 배는 초 단위의 시간을 나타낼 것입니다. 그러나 프로그램을 실행하면 사형 집행 사이에 0.5 초도 안되는 것 같습니다.

답변

0

발견!

나는 실제로 모든 것을 올바르게하고 있었지만, this answer에게 감사한다. 나는 나의 물건을 창조 할 때 속도 속성을 바꿨다고 생각했다. 일단 그것을 고치면 내 코드가 예상대로 실행됩니다. 몇 가지 다른 속도 관련 문제가 나타 났지만, 문제를 일으킨 원인을 알았으므로 이제는 해결할 수있을 것입니다.

이렇게하면 너무 빨리 (또는 너무 느리게) 실행되는 것과 유사한 문제를 일으키는 다른 사용자에게 도움이되기를 바랍니다. 의도하지 않게 SKSpriteNode.speed 속성을 변경하지 않도록주의하십시오.

관련 문제