SpriteKit이 MVC 패턴을 따르나요?


11

현재 Old Frank 라는 iOS 프로젝트 에서 MVC 디자인 패턴을 따르려고 노력하고 있습니다.

그것의 요지입니다.

GameObjects(model) <- Scene(controller) -> Sprites "SpriteKit" (View)

이제 MVC를 올바르게 이해하면 MVC를 따르려는 경우 SpriteKit이 제공하는 많은 기능을 사용할 수 없습니다. 예를 들어 any SKAction, 충돌 감지 등

게임 오브젝트가있는 모델과 다른 오브젝트를 만질 때 어떻게 반응해야합니까? 시간이 지남에 따라 위치를 결정하는 것은 모델에 달려 있지 않습니까?

SpriteKit에 렌더링 이외의 MVC에서 "보기"로 사용하기에 괜찮은 부분이 있습니까?


“MVC 디자인 패턴을 따르려고 노력했습니다”– 왜 그렇습니까?
Paul D. Waite

2
@ PaulD.Waite 나는 모델을 별도로 유지하는 아이디어를 좋아한다. 이론 상으로는 다른 플랫폼에서 쉽게 포팅하거나 다시 만들 수 있습니다. 또한 지금까지 가장 큰 이유였던 지속성을 관리하기가 훨씬 쉬워졌습니다.
Skyler Lauren

알았어 지속성 목표를 달성하기 위해 memento 패턴 이 MVC보다 더 적합 할 수 있습니다. 스프라이트는 작성자 일 수 있으며 저장 가능한 상태 표현을 생성하고 나중에 해당 표현에서 복원하는 책임이 있습니다. 장면 컨트롤러가 그들에게 표현을 요구하는 것일 수 있습니다.
Paul D. Waite

SpriteKit과 같은 Mac / iOS 전용 프레임 워크로 작업 할 때 이식성 측면에서 가능한 한 다른 저장 플랫폼에서 다른 게임에서 저장 게임을 사용할 수도 있습니다.
Paul D. Waite

1
@ PaulD.Waite 의견을 보내 주셔서 감사합니다. 추후에 고려해야 할 또 다른 패턴으로 memento 패턴을 살펴볼 것입니다. 두 질문은 같은 프로젝트에 관한 것이지만 관련이 없습니다. 다른 하나가 stackoverflow로 마이그레이션되어 오늘 밤에 더 답변을 볼 것임
Skyler Lauren

답변:


6

당신의 질문은 좋은 것입니다. SpriteKit과 관련하여 똑같은 질문이 있었고 웹에 대한 정보가 부족하다는 점에 대해 매우 혼란스러워했습니다. SpriteKit은 모든 Model-View-Controller 코드를 같은 클래스 (SKScene 서브 클래스)에 넣는 것을 권장합니다. 이 기술을 사용하여 복잡한 게임을 어떻게 만들 수 있습니까? touchesBegan / Ended와 같은 컨트롤러 코드와 게임 상태 (점수, numLives 등)를 결합하고 동일한 클래스에서 뷰 렌더링을 수행하는 것은 가장 단순한 게임을 넘어서는 관리하기가 매우 어렵습니다.

지속성을 지원하기 위해 memento 패턴을 사용하는 것이 좋은 생각이지만 MVC 디자인으로 전환하는 것이 유리할 수 있다고 생각합니다. 현재 게임을 MVC 아키텍처로 옮기고 있습니다. 현재 접근 방식은 모델 (게임 오브젝트)이 physicsBodies를 관리하고, SKScene 서브 클래스가 컨트롤러 역할을하고, 별도의 클래스가 장면에서 SKNode의 시각적 측면을 구성하고 렌더링하는 뷰 역할을하는 것입니다. 나는 프로세스의 일부일 뿐이므로 이것이 좋은 디자인인지 확실하게 말할 수는 없지만 SKScene의 10,000 라인 서브 클래스를 갖는 것보다 훨씬 나을 것 같습니다.


답변 / 댓글에 감사드립니다. SpriteKit의 기능을 사용하는 것이 MVC 디자인 패턴을 따르지 않는다고 생각하는 것처럼 들립니다. "나"가 MVC를 어떻게 사용하고 있는지에 대해 궁금한 점이 있거나 SpriteKit과 함께 "당신"이 MVC를 어떻게 사용하고 있는지에 대해 더 자세히 알고 싶다면 skyler@skymistdevelopment.com으로 이메일을 보내 주시기 바랍니다.
Skyler Lauren

대부분의 코드를 SKScene 클래스에 넣도록 강요 할 필요는 없습니다. 실제로 SpriteKit을 사용할 때 노드는 SpriteKit의 야만적이므로 대부분의 논리가 장면보다 훨씬 자연스럽게 노드로 넘어갑니다. Scene은 노드 트리의 업데이트 및 입력을 처리하는 "컨트롤러"에 지나지 않습니다. "MVC"모델은 여전히 ​​SpriteKit과 일치하지 않지만 노드는 "M"및 "V"인 경향이 있습니다.
Attackfarm

1

간단히 말해서 SpriteKit 게임의 일반적인 디자인은 장면, 레이어, 노드 및 자식 노드입니다.

각 파트를 모든 파트, 속성 및 메서드를 캡슐화하는 개별 클래스로 만들 수 있습니다.

예를 들어 레이어 이미지, 입자, 각 레이어의 속도와 같은 다양한 속성 및 배경 스크롤 시작 및 중지를위한 public 메서드가있는 Background 클래스가 있습니다.

이 디자인에서는 자체 업데이트 작업, 물리, 터치 이벤트 등을 주로 처리하는 장면에 자체 작업을 수행하는 이산 클래스를 구성합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.