Renderer의 필요성
화면에 그려지는 Actor와 그려지지 않는 Actor가 있을 수있다.
렌더러를 쓴다.
Renderer 클래스 << 화면에 그리는 역할
(개인적인 생각으로는 Unity의 SpriteRenderer 컴포넌트같은 역할 같음)
화면에 그려져야 하는 경우 렌더러를 만든다.
이 과정에서 렌더러와 Actor를 분리
엔진 은닉
엔진에 관련된 부분과 컨텐츠에 관련된 부분은 철저히 분리되어야 한다.
엔진 코드 내부에 컨텐츠와 관련된 코드가 있다던가 하면 좋지 않음.
어떻게 보면 엔진이 컨텐츠의 상위 객체라고 볼 수 있는데
객체지향에서도 부모 클래스에서 자식 클래스에 대해 아는 구조가 별로 좋지 않은 것과 같다.
콘솔 게임 엔진
목표물에 총알 맞추기 ( 사실상 콜리전 테스트인듯 )
1. 모든 총알을 가져온다
2. 모든 총알과 위치를 비교
1-1. 컨텐츠에서 직접 짜기
유저가 직접 관리하는 방식을 만든다. bullet 매니저 등등을 만든다.
클라이언트 프로그래머가 이 방법을 선호한다.
엔진이 제공하는 관련 기능을 알아내고 학습하는데도 시간이 걸린다.
엔진의 기능은 다형성 기반으로 했을 때 사용하지 않는다.
1-2 엔진의 기능 이용. 대부분 느림.
AActor가 어떤 객체에 상속되었는지는 엔진입장에서는 알 필요가 없다.
그래서 모든 AActor를 상속받는 객체에 대해서 내가 찾는 객체(Bullet)를 검색해야 하기때문에 느리다.
이런 이유로 상용 엔진에서 제공하는 Find같은 함수는 일반적으로 느림
직접 관리를 위해 Bullet 객체만 담을 Actor* 벡터를 하나 더만든다.
이 경우 SpawnActor함수에 의해 AllActorVector과 BulletVector 둘다 생성된 Bullet에 대한 메모리를 동시에
가리키게 되는데 이 부분을 주의해야 한다.(댕글링 포인터 발생할 수 있음)
static static static static static static static static 다시 복습
무조건 하나만 있다. 선언하고 사용하려면 무조건 초기화를 해야한다.
this 포인터가 따로 없음.
일반 멤버함수의 첫 인자는 무조건 this가 생략된다.
static 멤버함수는 객체가 없어도 호출할 수 있다.
객체가 1개만 필요하다 싶으면 그냥 static으로 만듦
EngineBase
EnginePlatform
EngineCore
Player 일반적으로 플레이어도 1명임
Template
템플릿 함수는 명시적 사용을 하지 않아도 인자를 알아서 추론하는 것이 가능하다.
템플릿 클래스는 안된다. 이 클래스를 생성할 때 컴파일러가 그 크기를 추론할 수가 없기 때문에 안됨.
그래서 템플릿 멤버함수를 짤 때 .h .cpp 분할이 안된다.
코드 작성 단계에서는 템플릿으로 나는 내부에러를 확인할 수 없다.
그래서 템플릿을 만들때는 typedef로 T에 대해 어떤 자료형을 집어넣고 만드는 것을 추천한다.
'개인 공부 및 프로젝트 > 국비과정' 카테고리의 다른 글
WinAPI PuyoPuyo2 (0) | 2024.11.15 |
---|---|
WinAPI 포트폴리오 - 뿌요뿌요2 (1) | 2024.11.03 |
20241014 - 동적할당, 템플릿 (2) | 2024.10.25 |
20241011 - default parameter, list initializer (0) | 2024.10.24 |
20241010 - 추상클래스, 동적 할당 (0) | 2024.10.24 |