2016-06-26 4 views
-1

나는이 부분에 갇혀있다. 나는 removeFromParent를 시도해 왔지만 작동하지 않는다. 내 게임에서 적의 콜라이드가 3 번이나 끝났을 때 문제는 몇 초간 계속해서 적을 때 사라지고 플레이어에게 계속 손상을줍니다.게임이 끝났을 때 스프라이트를 제거하는 방법은 무엇입니까?

func didBeginContact(contact: SKPhysicsContact) { 
    let body1 = contact.bodyA.node as! SKSpriteNode 
    let body2 = contact.bodyB.node as! SKSpriteNode 

    if ((body1.name == "circuloPrincipal") && (body2.name == "enemigo")) { 

     colisionPrincipal(body2) 



    }else { 

     ((body1.name == "enemigo") && (body2.name == "circuloPrincipal")) 

     colisionPrincipal(body1) 


    } 


} 




func colisionPrincipal(enemigo: SKSpriteNode) { 


     if hits < 2 && circuloPrincipal.color != enemigo.color{ 

     shakeFrame(scene!) 

      circuloPrincipal.runAction(SKAction.scaleBy(1.5, duration:0.5)) 

      enemigo.removeFromParent() 

      let particula = SKEmitterNode(fileNamed: "particulas.sks") 

      particula?.position = enemigo.position 
      particula?.hidden = false 

      particula?.runAction(SKAction.fadeOutWithDuration(0.8)) 


      self.addChild(particula!) 

      hits += 1 


     }else if circuloPrincipal.color == enemigo.color { 

      enemigo.physicsBody?.affectedByGravity = false 

      enemigo.physicsBody?.dynamic = true 

      enemigo.removeFromParent() 

     score += 1 

      scoreLabel.text = "\(score)" 


     }else { 

      shakeFrame(scene!) 

      gameStarted = false 

      enemigo.removeFromParent() 
      enemigoTimer.invalidate() 

      highscoreLabel.runAction(SKAction.fadeInWithDuration(0.5)) 


      if score > highscore { 

       let highscoreDefault = NSUserDefaults.standardUserDefaults() 

       highscore = score 

       highscoreDefault.setInteger(highscore, forKey: "highscore") 

       highscoreLabel.text = "Best: \(highscore)" 

      } 

    } 

} 
+0

당신은 정말 많은 작업 할 우리를 포기하지 않을거야 ... update() 기능에서 그것을 실행할 것입니다. 위의 함수는 어디에서 호출 되었습니까? 논리적 인 것은'gameOver' 변수와 같을 것입니다 (아마도 gameStarted var입니까?) 그런 다음 이것이 사실이라면 어떤 로직을 수행하는지 점검하지 않고 didBeginContact 함수에서 돌아옵니다. –

+0

내 질문에 연락처 코드를 입력했습니다. –

답변

0

확인, 그래서 나는 지나는 게임에 대한 모든 많은 정보를 필요는 없지만, 플레이어 손상을 유지하기 위해 원수를하지 않으려면 신속하고 더러운 수정 프로그램을 추가하는 것입니다 당신의 didBeginContact 기능의 정상에 가드 : 이것은 적어도 어떤 것도 방지한다

func didBeginContact(contact: SKPhysicsContact) { 
    guard hits < 3 else { 
     return 
    } 
    let body1 = contact.bodyA.node as! SKSpriteNode 
    let body2 = contact.bodyB.node as! SKSpriteNode 

    if ((body1.name == "circuloPrincipal") && (body2.name == "enemigo")) { 
     colisionPrincipal(body2) 
    }else { 
     ((body1.name == "enemigo") && (body2.name == "circuloPrincipal")) 
     colisionPrincipal(body1) 
    } 
} 

는 히트 필요한 번호가 발생한 후 연락처를 기반으로 전화를받을 수 있습니다. 스프라이트를 정리할 때, 이것은 매우 간단합니다 (적절한 시간에 removeFromParent). 그러나 게임 상태를 어떻게 처리하는지에 대한 단서가 없으므로 더 이상 주석을 달지 못합니다. 필요한 상태가 일어난 경우

는 개인적으로 나는

+0

Benjamin Thanks btw를 추가했지만 이제는 적들이 나던 데미지를받습니다. –

+0

기존 코드를 추가하면 히트 할 때까지 동일하게 작동해야합니다. 변수가 3에 도달했습니다.이 시점 이후에 적들은 아무런 피해도 입지 않을 것입니다. (의도 한대로 생각한 것입니까?) –

+0

좋아, 내가 설명해 준 비트를 추가했습니다. –

관련 문제