게임에서 MVC와 같은 구획화? [닫은]


19

게임 디자인 (보드 보드를 컴퓨터로 번역, 특히이 경우와 관련이 있다고 가정)을 고려하고 있었고 '디스플레이'와 별도로 '게임'을 빌드하는 것이 합리적이라고 생각했습니다.

간단한 텍스트 인터페이스를 사용하여 빠르게 프로토 타입을 제작 한 다음 나중에 다시 시작할 수 있습니다. 또한 게임을 다른 미디어로보다 쉽게 ​​포팅 할 수 있습니다.

이런 종류의 구획화는 게임에서 일반적입니까? 더 세분화하려고 노력해야합니까? 누락 된 합병증이 있습니까?

답변:


7

보드 게임은 게임 로직 (모델)이 비주얼 (뷰)과는 독립적으로 존재하기 때문에 MVC를 사용하여 만들 수있는 게임의 좋은 예입니다. 그러나 Gears of War와 같은 액션 게임을 고려할 경우 3D 모델의 지오메트리는 게임 논리에 내재되어 있으므로 뷰를 마치 마치 마치 상호 교환이 불가능한 것처럼 분리하는 것은 의미가 없습니다. Unity3D는 게임별로 코드를 구성하는 더 좋은 방법의 좋은 예입니다. 하나의 컴포넌트가 엔티티 그리기, 하나의 핸들 게임 로직 등을 처리 할 수있는 컴포넌트에 기능을 추가하는 기본 엔티티 클래스가 있습니다. 주제에 대한 다음 유명한 블로그 게시물을 확인하십시오.

http://cowboyprogramming.com/2007/01/05/evolve-your-heirachy/

http://gameprogrammingpatterns.com/component.html


MVC는 FPS에 적합합니다. 최소한 하나의 참조 는 gamasutra.com/features/20050414/rouwe_01.shtml을 참조하십시오 .
stonemetal

3
"... 3D 모델의 형상은 게임 논리에 내재되어 있습니다 ..."따라서 형상은 주로 컨트롤러에 의해 조작 될 수 있도록 모델 데이터가됩니다 (이 경우 물리에 영향을 미치므로 다른 모든 물리와 함께 존재합니다) 게임 로직 목적으로). 이 경우와 같이 뷰에도 사용되는 경우 실제 시뮬레이션은 모델에 영향을 미치는 컨트롤러이므로 2 차로 간주됩니다. 보기는 관련이 없습니다. (구성 데이터가 모델에 존재해야하는지에 대한 몇 가지 질문은 사용자에게 달려 있지만 원칙은 동일합니다.) 이것은 순수한 접근입니다.
엔지니어

5

내 생각은 :

  • 모델은 어디에서 대부분의 데이터 거짓말이며 모든 논리는 일어난다.
    입력 이벤트 큐를 읽고 이에 따라 게임 상태를 수정합니다.
    그런 다음 게임 상태를 업데이트하는 물리 및 기타 핵심 구성 요소와 같은 것을 처리합니다.
    고리. 그게 다야.
    목표는 모델을 독립적으로 만드는 것입니다. 뷰나 컨트롤러에 의존하지 않습니다. 모델 만 실행하는 프로그램을 만들 수 있어야합니다.
  • 보기는 단순히 모델의 게임 상태를 읽어 화면에 자신의 데이터의 표현에 전념 구성 요소 및 디스플레이 일을 업데이트합니다.
    모델에 아무 것도 쓰지 않습니다. 읽기 전용 프로세스입니다. 어쩌면 "Hey Mister Model 같은 두 이벤트 객체의 충돌을 감지하면 소리를내는 이벤트 핸들러를 호출하십시오. ").
  • 컨트롤러는 입력 이벤트를 포착하고 모델의 입력 큐에 전달합니다. 뷰를 읽습니다 (이 버튼 클릭이 UI 버튼에서 발생 했습니까?).

이렇게하면 미리 녹음 된 입력 이벤트가 포함 된 파일을 읽는 가짜 컨트롤러를 연결할 수 있습니다.
또한 파일에 물건을 기록하는 간단한보기를하십시오.
테스트 및 디버깅에 매우 유용합니다.

모델을 일정한 속도 (고정 시간 단계)로, 뷰와 컨트롤러를 가능한 한 빨리 (그러나 너무 가변적이지 않은) 업데이트해야합니다.


0

이러한 종류의 구획화는 엔진과 게임 코드가 분리되어 있으며 매우 일반적입니다. 길을 따라 추상화의 여지가 많이 있습니다.

엔진과 게임 고유의 그래픽 데이터는보기, 게임 코드 모델, 컨트롤러는 게임 코드의 어떤 개체에 어떤 텍스처를 적용할지 엔진에 알려주는 데 사용되는 접착제입니다.


2
이것은 사실이 아닙니다. MVC는 사용자 인터페이스 (보기 및 컨트롤러)에서 상태 (모델)의 분리를 정의합니다. "엔진"은 게임을 빌드 할 수있는 일반적인 프레임 워크이며 모델, 뷰 및 컨트롤러의 기본 요소를 포함 할 수 있습니다.
MikeWyatt
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.