언급 한 단계는 대부분 별도의 엔진에서 수행됩니다. 단순한 게임 엔진은 일반적으로 한 번에 통과합니다. 시퀀스
for each object
do physics
do game logic
draw
된다
call physics subsystem
call game logic subsystem
call drawing subsystem
물리 엔진은 위치와 크기를 관리합니다.
Game Logic Engine은 Physics Engine이 변경 한 사항 (일부는 중간 지점을 방해 할 수 있음), 캐릭터의 목표 및 수행해야 할 동작 , 예정된 스크립트 (이 기능을 생각 함 ) 를 해석합니다 .
Drawing Engine은 어떤 객체가 보이는지 그립니다. Quake 엔진이 여기에서 일종의 속임수로 인해 어떤 객체가 보이는지 알고 있습니다 (Draw 섹션 참조).
당신에게 나의 충고는 게임 엔진이 아닌 시뮬레이션이 어떻게 수행되는지 연구하는 것입니다. 게임 개발과 관련된 거대한 대중 문화가 있으며 게임 엔진은 전통과 속도로 인해 명령 언어로 만들어집니다. 그래서 좋은 교과서 (이론보다는)를 얻고 엔진을 보지 않고 엔진을 연습하는 방법 (실습)을 얻는 것이 더 깨달았습니다.
물리학
모든 엔티티를 반복하고 {생각, 그리기}하는 것에 대한 전체 개념은 아마도 문제를 일으킬 것입니다. 갈등이있을 것입니다. 밸브에 Havok이 있다고 생각하고 Havok이 충분히 올바른 물리를 처리한다고 생각합니다.
생각한다
씽크 기능은 게임의 시간이 nextthink의 시간과 같을 때 실행됩니다 . Quake 엔진에서 이러한 방식으로 작동하며 Quake 엔진은 Half Life 엔진의 기본입니다. 매번 실행되지는 않습니다.
내부적으로 엔티티 목록을 반복하고 think 함수를 호출하는 데 시간이 지 났는지 확인하는 간단한 방법이어야합니다. 시간 복잡도는 O (N)이며 N은 엔터티 수입니다.
엔터티가 매우 많은 경우 fps를 얼마나 향상 시킬지 측정해야합니다. 때문에 참고, 암달의 법칙 은 잠재적으로 눈에 보이지 않는 속도 향상이다. 내 말은, 당신은 모든 항목을 통해 반복하고 하나의 숫자를 줄이고 확인합니다.
엔티티를 nextthink로 정렬하여 속도를 높일 것입니다 (엔티티에 대한 포인터 목록을 생성하고 매번 정렬합니다. 엔티티 배열이 아닌 엔티티 배열은 언제든지 엔티티가 nextthink를 변경할 수 있기 때문에 배열에서 재정렬하려면 O 대신 O (N)이 필요합니다 ( 1) 목록에서).
Linux 에서 O (1) 스케줄러 도 살펴 봐야 합니다.
무승부
엔진은 카메라가있는 영역에서 대략 보이는 것을 그립니다. 게임 레벨은 나무로 나뉘어져 있으며 영역은 그 나무의 잎입니다. 나는 당신 에게 그것에 대한 세부 사항을 귀찮게하지 않을 것입니다 ... 따라서 엔터티가 표시되면 보이는 엔터티 세트에 넣고 그려집니다.
잠재적으로 보이는 영역을 저장합니다. 간단히 "잠재적 가시성 세트", PVS라고 합니다. 이 PVS의 시각화 , 녹색 캡슐은 선수와 그의 주위에 그의 PVS에 포함 된 내용을 렌더링됩니다.
<some commercial engine>
합니까?