Swift로 SpriteKit을 사용하여 게임을 만들고 있습니다.SkScene에서 UIViewController로 NSNotificationCenter 사용
인터페이스 빌더를 사용하여 자동 레이아웃을 사용할 수 있도록 모든 버튼 (메뉴, 재시도 등)을 배치합니다. 그런 다음 NSNotificationCenter를 사용하여 SKScene에이 버튼을 게임 오버 기능으로 표시합니다. SKN에서 UIKit을 표시하는 데 NSNotificationCenter를 사용하는 데 아무런 문제가 없습니다.
여기 내 문제는 내가 시도하고 최선을 다해 설명 할 것입니다.
게임 오버가 발생하면 retry라는 UIButton이 표시됩니다. 재시도 기능을 위해 SKScene에 NSNotificationCenter 옵저버를 설정하고 viewController의 버튼에 대해 IBAction에서 postNotificationName을 호출합니다. 알림은 내가 처음 게임을로드 할 때 완벽하게 작동합니다. 재생하고 다시 시도하고 재생하고 다시 시도 할 수 있습니다.
그러나 메인 메뉴로 돌아가 게임을 다시로드하고 다시 시도하면 게임이 중단됩니다. 가끔은 그냥 (lldb). 인식 할 수없는 셀렉터가 인스턴스로 전송 된 다른 시간입니다. 이 인의 ViewController
class GameSceneViewController: UIViewController{
@IBOutlet weak var homeBtn: UIButton!
@IBOutlet weak var retryBtn: UIButton!
var userDefaults = NSUserDefaults.standardUserDefaults()
//MARK: Button Actions
@IBAction func returnToMenu(sender: UIButton) {
self.dismissViewControllerAnimated(true, completion: nil)
}
@IBAction func retryGame(sender: UIButton) {
NSNotificationCenter.defaultCenter().postNotificationName("retrygame", object: nil)
}
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
var scene: GameScene!
let skView = view as SKView
skView.showsFPS = false
skView.showsNodeCount = true
skView.showsPhysics = false
skView.ignoresSiblingOrder = true
scene = GameScene(size: skView.bounds.size)
scene.scaleMode = .AspectFill
skView.presentScene(scene)
}
이것은 GameScene입니다 : 여기
내가 지금까지 가지고있는 코드입니다class GameScene: SKScene {
//MARK: The View
override func didMoveToView(view: SKView) {
self.backgroundColor = UIColor.grayColor()
setUpGame()
NSNotificationCenter.defaultCenter().addObserver(self, selector: "retry", name: "retrygame", object: nil)
}
func retry(){
print("test")
}
왜 이런 일이 무엇입니까? 왜 관측자는 첫 번째 놀이를 위해 먼저 일하지만, 나가서보기로 돌아간 후에 실패합니까? 더 이상 필요하지 않은 정보는 단지 의견을 게시하십시오. 어떤 도움이라도 정말 감사 할 것입니다!
답장을 보내 주셔서 감사합니다. 정확히 내가 이것을 어디에 추가합니까? GameSceneViewController 또는 GameScene (SkScene)에 이것을 추가합니까? – PoisonedApps
통지에 대한 관찰자 인 오브젝트에이를 추가합니다. 귀하의 경우에는 GameScene입니다. self 나 GameScene 인스턴스를 전달할 때 addObserver()를 호출하면 객체가 관찰자라는 것을 추론 할 수 있습니다. – Cezar