답변
이제 몇 가지 제안과 함께 덜 경솔한 답변을 드리겠습니다. 이를 구현 권장 사항으로 사용하지 말고 가능한 사용의 예로 더 많이 사용하세요.
- 빌더 : 데이터를 기반으로 한 번에 하나의 구성 요소 기반 엔티티 설정
- Factory Method : 파일에서 읽은 문자열을 기반으로 NPC 또는 GUI 위젯 생성
- 프로토 타입 : 초기 속성이있는 일반 “Elf”문자 하나를 저장하고 복제하여 Elf 인스턴스를 생성합니다.
- 싱글 톤 : 이 공간은 일부러 비워 두었습니다.
- 어댑터 : 선택적인 타사 라이브러리를 래핑하여 통합합니다. 기존 코드처럼 보이는 레이어입니다. DLL에 매우 유용합니다.
- 복합 : 렌더링 가능한 개체의 장면 그래프를 만들거나 위젯 트리에서 GUI를 만듭니다.
- Facade : 나중에 더 쉽게 사용할 수 있도록 더 간단한 인터페이스를 제공하여 복잡한 타사 라이브러리를 단순화하세요.
- Flyweight : NPC의 공유 된 측면 (예 : 모델, 텍스처, 애니메이션)을 개별 측면 (예 : 위치, 건강) 대부분 투명한 방식
- 프록시 : 서버에서 더 크고 복잡한 클래스를 나타내는 작은 클래스를 클라이언트에 만들고 네트워크를 통해 요청을 전달합니다.
- 책임 체인 : 입력을 다음과 같이 처리합니다. 핸들러 체인, 예. 글로벌 키 (예 : 스크린 샷용), GUI (예 : 텍스트 상자에 초점이 맞춰져 있거나 메뉴가있는 경우), 게임 (예 : 캐릭터 이동용)
- 명령 : 게임 기능을 콘솔에 입력하거나, 저장 및 재생하거나, 게임 테스트를 돕기 위해 스크립팅 할 수있는 명령으로 캡슐화합니다.
- 중재자 : 게임 엔티티를 다양한 구성 요소에서 작동하는 작은 중재자 클래스로 구현합니다 (예 : AI 구성 요소에 데이터를 전달하기 위해 건강 구성 요소에서 읽음)
- 관찰자 : 필요한 경우 시각적 표현을 변경하기 위해 캐릭터의 렌더링 가능한 표현이 논리적 표현의 이벤트를 수신하도록합니다. 코드 렌더링에 대해 알아야하는 게임 로직
- 상태 : NPC AI를 여러 상태 중 하나로 저장합니다. 공격, 방황, 도주. 각각은 자신의 update () 메서드와 필요한 다른 데이터를 가질 수 있습니다 (예 : 공격하거나 달아나는 캐릭터 저장, 방황하는 영역 등).
- 전략 : 전환 어떤 종류의 지형에 있는지 또는 동일한 A * 프레임 워크를 사용하여 경로 찾기와보다 일반적인 계획을 모두 수행하는 방법에 따라 A * 검색에 대한 다른 휴리스틱 스
- 템플릿 방법 : 설정 일반 “전투”루틴, 각 단계를 처리하는 다양한 후크 기능 (예 : 탄약 감소, 적중률 계산, 적중 또는 실패 해결, 피해 계산)이 있으며 각 유형의 공격 기술은 고유 한 방식으로 방법을 구현합니다.
영감 부족으로 일부 패턴이 빠졌습니다.
댓글
답변
답변
Brandon Eich가 코더에서 제기 한 좋은 점 한 가지는 at Work 는 패턴이 해킹과 해결 방법이라는 것입니다. [Patterns]는 언어에 어떤 종류의 결함을 보여줍니다. 이러한 패턴은 무료가 아닙니다. 공짜 점심은 없습니다. 따라서 우리는 올바른 부분을 추가하는 언어의 진화를 찾아야합니다.
컴파일러 디자이너보다는 게임 프로그래머로서 언어를 발전시킬 수있는 옵션을 거의 얻지 못합니다. 우리는 사용하지만 우리의 언어와 요구 사항에 더 잘 맞도록 우리 자신의 스타일을 발전시키는 법을 배울 수 있습니다. 패턴은 이것의 일부이지만 패턴을 사용하지 않는 또 다른 부분입니다. 특히 Brandon이 말했듯이 패턴은 거의 사라지지 않기 때문입니다. 눈에 띄는 성능이나 메모리 또는 코드 민첩성 비용이 없습니다. MVC는 게임의 많은 작업에 적합한 패턴이 아닙니다. Singleton은 절름발이 C ++ 정적 초기화 규칙에 대한 해결 방법이며 어쨌든 그렇게해서는 안됩니다. Factory는 복잡한 객체 생성을 단순화합니다. 아마도 객체는 시작하기 더 간단해야합니다. 인기있는 패턴은 복잡한 것을 관리하기 위해 필요할 때 사용하는 도구이며, 처음에 복잡한 것을 구축하는 데 사용하고 싶어해야하는 도구가 아닙니다.
좋은 (게임) 코드는 패턴을 사용하거나 사용하지 않을 수 있습니다. 패턴을 사용하는 경우 괜찮습니다. “언어 독립적 인 수준에서 다른 프로그래머에게 코드 구조를 설명 할 수있는 훌륭한 커뮤니케이션 도구입니다. 패턴을 사용하지 않고 코드가 더 낫다고 생각하는 경우, 자신을 두드리지 마십시오.” 아마도 그럴 것입니다.
댓글
답변
물론 다른 사람들이 말했듯이 , 모든 패턴은 적절한 상황에서 유용하며, 패턴을 사용하는 방법을 배우는 부분은 언제 사용하는지 배우는 것입니다. 그러나 Daniel Sanchez-Crespo Dalmau가 저술 한 Core Techniques and Algorithms in Game Programming 에는 6 개의 프로그래밍 패턴과 6 개의 사용성 패턴이 나열되어 있습니다. 특히 게임 프로그래밍에 유용합니다.
프로그래밍 :
- 싱글턴 : 저는 많은 사람들이하는 것처럼 이것을 싫어하지 않습니다. 싱글과 같은 일에 사용할 수 있습니다. 플레이어 플레이어 또는 키보드 리더.
- 공장 : 개체를 효율적으로 만들고 파괴 할 수 있습니다.
- 전략 : AI 전략을 우아하게 변경할 수 있습니다.
- 공간 색인 : 공간 데이터 세트에 대한 쿼리 수행을 돕습니다.
- 복합 : 유용한 객체 계층을 설정합니다.
- Flyweight : 동일한 적과 같은 것을 일반화하여 메모리를 해제합니다.
유용성 :
- 실드 : 극적인 행동의 우발적 활성화로부터 보호합니다.
- 상태 : 세계 / UI 상태의 시각적 신호
- 자동 모드 취소 : 게임이보다 직관적으로 작동하도록합니다.
- 자석 ism : 자동 조준 및 쉬운 단위 선택.
- 포커스 : 산만 한 UI 요소 제거
- 진행 : 보편적으로 유용합니다.
물론이 책은 , 각각에 대해 자세히 설명합니다.
댓글
Answer
엔티티 시스템 은 좋은 패턴입니다. 엉뚱한 OOP가 아니기 때문에 정확히 디자인 패턴이 아닙니다. 그러나 OOP와 혼합 할 수 있습니다.
좋은 링크 (인트로는 위에서부터 시작) :
댓글
답변
모두. 싱글 톤을 제외하고. [/ flippancy]
댓글
답변
실제로 패턴에 관한 것이 아니라 그이면의 기본 원칙에 관한 것입니다. “Design Patterns : Elements of Reusable Object-Oriented Software”(1995) 에서는 4 인조 (Gamma, Erich, Richard Helm, Ralph Johnson, John Vlissides)는 객체 지향 설계에 대해 두 가지 원칙 만 권장합니다. (1) 프로그램을 구현이 아닌 인터페이스에, (2) 는 클래스 상속보다 객체 구성을 선호합니다.
이 두 가지 원칙은 게임의 많은 작업에서 매우 유용합니다. 개발. 예를 들어 많은 게임 프로그래머는 게임 엔티티를 표현하기 위해 깊은 클래스 계층 구조 를 사용했습니다. 구성 -구성 요소 기반 게임 개체를 기반으로하는 또 다른 접근 방식이 있습니다. 이 접근 방식에 대한 문서 . 더 많은 링크 . 데코레이터 패턴 예제입니다.
댓글
Answer
기이하게 반복되는 템플릿 패턴 은 가상 메서드 및 가상 함수 호출에서 발생할 수있는 성능 저하를 피하는 데 매우 유용 할 수 있습니다.
이것은 인터페이스가있는 기본 클래스 유형의 컨테이너가 실제로 필요하지 않지만 유사한 이름의 동작 및 인터페이스를 갖고 싶은 경우 적절한 패턴이 될 수 있습니다.
예를 들어 컴파일 타임에 유형의 변화가 알려진 여러 플랫폼 또는 엔진 (dx 대 OpenGL)에 대한 클래스를 컴파일 할 때 이것을 사용할 수 있습니다.
Comments
Answer
수년에 걸쳐 발전해 왔으며 매우 유용했던 디자인 패턴을 “중단 된 정의 집합”이라고합니다. GOF 용어로 요약하는 방법은 논란의 여지가있는 것처럼 보이지만 StackOverflow에 작성한이 질문 에 대해 자세히 설명합니다.
핵심 개념은 생물의 종과 같은 모델의 일부 속성이 속성에 대해 가능한 각 값이 동작을 지정하는 해당 정의 개체 (값당 단일 공유 개체)를 갖도록 설정된다는 것입니다. , 이들은 중앙 브로커 (GOF 측면에서 레지스트리, 팩토리 또는 둘 다일 수 있음)를 통해 액세스됩니다. 필자의 사용에서는 일반적으로 스칼라 키를 통해 액세스하여 런타임 모피 즘 목적을위한 약한 바인딩을 용이하게합니다.
댓글