Game Develop/Design Pattern(12)
-
Double Buffer Pattern(이중 버퍼 패턴)
이중 버퍼 패턴은 순서 패턴의 한 중류이다.이중 버퍼 사용의 의도는 여러 순차 작업의 결과를 한 번에 보여주기 위함이다. 본질적으로 컴퓨터는 순차적으로 동작한다. 굉장히 큰 일은 작은 단계로 쪼개어 하나씩 처리하는 것이다.하지만 사용자 입장에서 순차적으로 혹은 동시에 진행 되는 여러 작업을 한 번에 모아서 봐야 할 경우가 있다. 예를 들어 게임 랜더링시에 플레이어에게 시각적인 모든 정보를 한 번에 제공해야 한다.멀리 있는 산, 굴불구불한 언덕, 나무 등 모든 것들을 말이다.이때 화면에 그려지는 인스턴스들을 하나씩 보여주면 플레이어의 몰입을 방해할 수 있다.따라서 장면은 부드럽고 빠르게 업데이트 돼야 하고 매 프레임 완성되면 한 번에 보여줘야 한다. 위의 조건을 만족하기 위한 수단으로 이중 버퍼 패턴을 사..
2024.06.15 -
State Pattern(상태 패턴)
상태 패턴은 GoF의 세가지 패턴 중 행위 패턴에 속한다. 행위 패턴은 클래스나 객체들이 서로 상호작용하는 방법이나 책임 분배 방법을 정의하는 패턴이다.상태 패턴의 특징은 다음과 같다.- 객체 상태에 따라 동일한 동작을 다르게 처리해야 할 때 사용- 객체 상태를 캡슐화하고 이를 참조하는 방식으로 처리 상태 패턴의 근본 개념인 유한 상태 기계(FSM, finite state machine)와 더 나아가 계층형 상태 기계(HSM, hierarchical state machine)와 푸시다운 오토마타 pushdown automata 까지 알아보자. 보통 상태 기계는 AI나 컴파일러 개발자가 아니라면 익숙한 개념이 아닐 수 있다. 하지만 상태 기계 역시 다른 분야에서도 사용될 수 있다. 간단한 횡스크롤 플랫포머..
2024.06.12 -
Singleton Pattern(싱글턴 패턴)
싱글턴 패턴은 GoF의 세가지 패턴 중 생성 패턴에 속한다. 생성 패턴은 클래스나 객체의 생성과 참조 과정을 정의하는 패턴이다. 싱글턴 패턴의 특징은 다음과 같다.- 하나의 객체를 생성하면 생성된 객체를 어디서든 참조할 수 있지만, 여러 프로세스가 동시에 참조하지는 못함- 클래스 내에서 인스턴스가 하나뿐임을 보장하며, 불필요한 메모리 낭비를 최소화 할 수 있음 싱글턴 패턴은 의도와는 달리 득보다는 실이 많다. 싱글턴 패턴을 부적당한 곳에 사용하면 못질하는데 톱을 가져오는 것 만큼이나 쓸모가 없다. 싱글턴 패턴이 무엇인지 다루고, 또 피할 수 있는 방법도 같이 다뤄보자. 싱글턴 패턴은 오직 한 개의 클래스 인스턴스만 갖도록 보장한다.인스턴스가 여러 개면 제대로 작동하지 않는 상황이 종종 있다. 예를들어 ..
2024.06.10 -
Prototype Pattern(프로토타입 패턴)
관찰자 패턴은 GoF의 세가지 패턴 중 생성 패턴에 속한다. 생성 패턴은 클래스나 객체의 생성과 참조 과정을 정의하는 패턴이다. 프로토타입 패턴의 특징은 다음과 같다.- 원본 객체를 복제하는 방법으로 객체를 생성- 일반적인 방법으로 객체를 생성하며, 비용이 큰 경우 주로 이용함 RPG 게임을 만든다고 해보자. 몬스터들은 영웅을 해치기 위해 떼지어 다닌다. 이 몬스터들은 스포너를 통해 게임 레벨에 등장하는데, 몬스터 종류마다 스포터가 따로 있다 게임에 나올 몬스터마다 클래스를 만들어 보자. Ghost, Demon, Sorcerer 3 종류의 몬스터가 있다.class Monster{ // 데이터...};class Ghost : public Monster {};class Demon : public Mon..
2024.06.07 -
Command Pattern(명령 패턴)
명령 패턴은 GoF의 세가지 패턴 중 행위 패턴에 속한다. 행위 패턴은 클래스나 객체들이 서로 상호작용하는 방법이나 책임 분배 방법을 정의하는 패턴이다. 명령 패턴의 특징은 다음과 같다.- 요청을 객체의 형태로 캡슐화하여 재이용하거나 취소할 수 있도록 요청에 필요한 정보를 저장하거나 로그에 남김- 요청에 사용되는 각종 명령어들을 추상 클래스와 구체 클래스로 분리하여 단순화 명령 패턴이 자주 쓰이는 입력키 변경 코드를 예시로 들어보자 모든 게임은 버튼이나 키보드, 마우스를 이용한 입력을 읽는 코드가 있다.위의 그림에 맞는 아주 간단한 코드를 작성해보자.void InputHandler::handleInput{ if(isPressed(BUTTON_X) jump(); else if(isPressed..
2024.06.06