GEMS 2권 (5)

GEMS 2016. 2. 3. 15:39

1.6 dti(dynamic type information)

1.7 property/ propertyset


1.8 게임 개체 팩토리

프레임워크 설계에서 상정한 목표들

1. 논리적 행동과 시청각 행동의 분리

2. 빠른 개발.

3. 코드 중복의 방지


구성요소 - 플라이급, 행동, 익스포트된 클래스

- 플라이급 : 개체의 모양과 느낌, 객체 조립 패턴을 통해서 구현된다.

 * 객체는 하나의 플라이급 객체에 대한 포인터를 가지며, 그 것을 통해서 자신의 시청각적 특징을 표현한다.

- 행동 : 객체가 게임세계와 상호작용하는 방식, 전통적인 상속방식으로 구현된다.

 * Entity라는 클래스가 그 계통구조의 추상기반 클래스이다.

- 익스포트된 클래스 : 객체가 자신을 세계에 알리는 방식을 정의한다. 하나의 열거형 상수로 구현되며(편의를 위해서), 하나의 개체가 자신의 수명동안 몇 가지 서로 다른 객체들을 통해서 자신을 알릴 수 있도록 한다.


- 플라이급

다양한 상황들에서 동시적으로 공유, 사용될 수 있도록 자신의 문맥(context)을 박탈당한 객체라고 설명하고 있다.

개체의 현재 상태를 제외한 모든 것들이 플라이급 정보라고 할 수 있다.

* SAMMy : 상태 및 매체 관리자


- 행동

템플릿 메서드 패턴

기본 클래스에 처리하는 기본 함수를 만들어두고 그 안에 가상함수를 넣어처리하는 방법인듯하다.


- 익스포트된 클래스

스크립트 작성자가 게임 개체의 내부 상태 정보를 알 필요가 없도록 만드는 아주 편리한 기법


전략 패턴 - 컴포넌트 시스템의 기본이 되는 패턴.


클래스 안에서 함수포인터를 사용하기 위해선 스크립트 컴파일러에 의해 생성된 함수를 클래스의 friend함수로 선언하는 것. friend함수로 선언하는 이유는, 그 함수가 클래스의 private 데이터 멤버들에 접근할 수 있도록, 그리고 그 함수를 현재 객체를 뜻하는 특별한 포인터인 this에 첫번째 인수로서 넘겨 줄 수 있도록 하기 위해서이다.


class SomeEntity : public Entity

{

//함수 포인터

void ( * friendptr ) ( Entity * me, Entity * target );

public : 

//하나나 그 이상의 전략 함수들을 friend로 선언한다.

friend void Strategy1( Entity * me, Entity * target);

...

//실제 작동

void HandleInteractions ( Entity * target )

{

(* friendptr) (this, target) ; // this를 첫번째 인수로서 넘겨주기 위한것

}

}








'GEMS' 카테고리의 다른 글

GEMS 2권 스택와인딩(stack winding)  (0) 2016.02.04
GEMS 2권(6)  (0) 2016.02.04
GEMS 2권 DLL로 부터 C++클래스 내보내기  (0) 2016.01.22
GEMS 2권 추상 인터페이스  (0) 2016.01.22
GEMS 2권 인라인 VS 매크로  (0) 2016.01.21
posted by 알쿠미