2017-03-08 5 views
1

2 개의 SKSpriteNodes를 버튼으로 사용하여 레벨을 기준으로 게임을 만들면 다음 또는 이전 레벨로 이동하여 GameViewController가 새로운 장면을 표시하게됩니다. 나는 SKScene에게 현재의 새로운 장면 함수를 호출하기 위해 gameviewController를 직접 참조하는 속성을 갖도록 만들었지 만, 내가 이해하는 것으로부터 MVC 모델을 깨뜨린 것입니다. 이거 나쁜거야? 대안이란 무엇입니까?SpriteKit Game Logic

답변

7

iOS 프로그래밍의 표준 대안은 위임이라고하는 패턴입니다. 첫째, 스위칭 수준의 구현을 추상화하는 프로토콜을 만듭니다. GameViewController

protocol LevelSelector: class { 
    func didSelectNextLevel(from scene: SKScene) 
    func didSelectPreviousLevel(from scene: SKScene) 
} 

적절한 수준의 현장에 변경이 프로토콜을 구현합니다. 수준을 구현하는 각각의 장면이 있습니다

weak var levelSelector: LevelSelector? 

GameViewController는 각 레벨 장면의 levelSelector로 자신을 설정합니다

scene.levelSelector = self 

사용자가 다음 및 이전 수준 버튼을 나타내는 SKNode의 도청, 적절한 방법으로 전화하십시오 :

levelSelector?.didSelectNextLevel(from: self) 

//OR 

levelSelector?.didSelectPreviousLevel(from: self)