2014-10-13 3 views
0

GameViewController 클래스에서 초기화 된 UIButton으로 게임을 일시 중지하려면 GameViewController에서 내 Timest 메서드 (내 GameScene로 작성)를 호출해야합니다. 나는이 같은 class func를 사용하기 위해 노력하고있어SWIFT에서 클래스 func을 사용하여 다른 클래스의 메서드를 호출하는 방법

는 :

[Funfair_balloon.GameScene updateTimer:]: unrecognized selector sent to class 0x10b13d940

내가 앱이 완벽하게 작동 class func 사용하지 마십시오

class GameScene: SKScene, SKPhysicsContactDelegate { 
    override func didMoveToView(view: SKView) { 
     GameScene.startTimer() 
    } 

    class func startTimer(){ 
     timerCount = NSTimer.scheduledTimerWithTimeInterval(1.0 
     , target: self, selector: Selector("updateTimer:"), userInfo: nil, repeats: true) 
    } 


    func updateTimer(dt:NSTimer){ 

     counter-- 
     counterGame++ 

     if counter<0{ 
      timerCount.invalidate() 
      removeCountDownTimerView() 
     } else{ 
      labelCounter.text = "\(counter)" 
     } 

     if counterGame>20{ 
      balloon.size = CGSizeMake(50, 50) 
     } 
     if counterGame>40{ 
      self.physicsWorld.gravity = CGVectorMake(0, -0.8) 
     } 
     if counterGame>60{ 
      self.physicsWorld.gravity = CGVectorMake(0, -1) 
     } 
    } 

    func removeCountDownTimerView(){ 
     defaults.setInteger(balloonDestroyed, forKey: "score") 
     let storyboard = UIStoryboard(name: "Main", bundle: nil) 
     let settingController: UIViewController = storyboard.instantiateViewControllerWithIdentifier("GameOverViewController") as UIViewController 
     let vc = self.view?.window?.rootViewController 
     vc?.presentViewController(settingController, animated: true, completion: nil) 


    } 

} 

그러나이 코드 오류를 반환 하지만 내 UIButton 타이머를 멈출 수 없습니다. 내가 뭘 잘못 했니?

+0

당신이'timerCount = NSTimer.scheduledTimerWithTimeInterval (1.0, 대상에'updateTimer'를 호출하는 타이머를 말할 선택기 ("updateTimer :"), 사용자 정보 : 전무, repeat : true)'하지만 class func의'self'는 인스턴스가 아니므로 class 메소드가 아닌 인스턴스 메소드 인'updateTimer'를 호출하는 데 사용할 수 없습니다. – Grimxn

+0

답장을 보내 주셔서 감사합니다. 나는 GameScene()으로 자기를 대체합니다. 더 이상 오류가 없지만 타이머가 작동하지 않습니다. – Haox

답변

0

class func을 사용할 때 해당 클래스에서 초기화 된 변수를 사용할 수 없습니다.

예를 들어 변수 timerCount이 클래스 GameScene에서 초기화 된 경우 사용할 수 없습니다.

+0

그래서'GameScene 클래스 '에서'class func'에 필요한 모든 변수를 초기화해야합니까? – Haox

+0

또는 func에서 파라미터로 전달하십시오. –

0

클래스 기능을 사용하려는 이유가 확실하지 않습니다. 다음은 현재 인스턴스 인 GameScene 만 사용하면됩니다. var timerCount은 선택 사항이므로 startTimer()에 생성 할 때까지 쉽게 init을 무시할 수 없으므로 결국 무효화 할 때 unwrap해야합니다. 자기 선택 : 당신의`클래스 FUNC의 startTimer`에서

class GameScene: SKScene, SKPhysicsContactDelegate { 
    var timerCount: NSTimer? = nil 
    var counter = 100 // or whatever 

    override func didMoveToView(view: SKView) { 
     self.startTimer() 
    } 

    func startTimer() { 
     self.timerCount = NSTimer.scheduledTimerWithTimeInterval(1.0 
      , target: self, selector: Selector("updateTimer:"), userInfo: nil, repeats: true) 
    } 


    func updateTimer(dt: NSTimer) { 
     // Do stuff 
     counter-- 

     if counter < 0 { 
      self.timerCount!.invalidate() // or dt.invalidate() 
      self.removeCountDownTimerView() 
     } else { 
      // update counter label 
     } 
     // Do more stuff 

    } 

    func removeCountDownTimerView() { 
     // Do stuff 
    } 

} 
+0

감사합니다. 사실 게임과 타이머가 기록 된 GameScene이 있습니다. 내 GameViewController에서 "일시 중지"UIButton을 만들었습니다. 일시 정지 버튼을 탭하면 게임과 타이머를 멈추고 싶습니다. 잠시 동안 skView (장면이 아님)를 일시 중지하고이 버튼으로 'timerCount'를 무효화 할 수 있지만 노드가 계속 만들어져 타이머를 다시 시작할 수 없습니다. 그래서 ViewController에서 GameScene에있는 메소드에 액세스하려고합니다. – Haox

+0

음, 방금 코드를 사용해 보았습니다. 그것은 작동하지만 어떻게'pauseButton'과 함께 ViewController에서 타이머를 재시작 할 수 있습니까? – Haox

+0

'startTimer' 액션을 액션으로 만들고 버튼에 연결 하시겠습니까? – Grimxn

관련 문제