Game Loop

카테고리 없음 2018. 12. 19. 00:25

Game Loop


게임 진행 시간을 유저입력, 프로세서속도와 디커플링




	while (true)
	{
		processInput();
		update();
		render();
	}


* 간단하지만 플랫폼과 작업량에 따라 게임 진행 시간이 바뀜





        #define MS_PER_FRAME 16

	while (true)
	{
		clock_t start = clock();
		processInput();
		update();
		render();

		Sleep(start + MS_PER_FRAME - clock());
	}


* 기준이 되는 프레임 속도 안에서 계산이 완료되면 쉬어줘서 전력효율 높임, 느려지는 게임에 대해서 대처 불가





	clock_t lastTime = clock();
	while (true)
	{
		clock_t current = clock();
		clcok_t elapsed = current - lastTime;
		processInput();
		update(elapsed);
		render();
		lastTime = current;
	}


* 현실 시간에 맞춰서 게임 진행 시간을 조절하지만 게임플레이가 불안정하고 코드가 비결정적(결과가 일정하지않음)





        #define MS_PER_FRAME 16

	clock_t lastTime = clock();
	double lag = 0.0;
	while (true)
	{
		clock_t current = clock();
		clcok_t elapsed = current - lastTime;
		lastTime = current;
		lag = lag + elapsed;
		processInput();

		while (lag >= MS_PER_UPDATE)
		{
			update();
			lag -= MS_PER_UPDATE;
		}
		render();
	}


* 느리거나 빨라도 잘 적응!


cf) 보간

 - 게임 상태 update는 거의 고정된 시간으로 일어남

 - render는 시간적 여유가 되면 일어남


   update와 render의 호출 빈도와 시간이 달라짐


 -> update(A)와 update(B) 사이에 render가 발생하면 A상태로 render하기 때문에 다음 render에서 튀어보일 수 있음



따라서 마지막줄 render의 파라미터로


lag / MS_PER_UPDATE : update(A)와 update(B) 사이에 흐르던 시간만큼 0부터 1로 정규화된 값


를 넘겨주고 그 값으로 보간한다






Posted by @히테
,

Class Diagram


시스템의 클래스, 속성, 작업 (또는 메소드) 및 객체 간의 관계를 보여줌으로써 시스템의 구조를 설명하는 정적 구조 다이어그램 유형



Class 표현



* 클래스

 - 상단 박스 : 클래스 이름

 - 중단 박스 : 속성(Attribute)

 - 하단 박스 : 행동, 연산(method)



* 가시성(접근지시자)

 + : public

 - : private

 # : protected



* stero type은 UML에서 제공하는 것 외의 추가 확장요소로써 길러멧(guillemet, « ») 사이에 적음 

ex) utility, interface 등



* abstract class, method는 italic체로 표현








관계




* Association(연관) : 다른 객체의 참조를 필드로 갖음


 - 단방향 연관 관계 : 일방적으로 참조







 - 양방향 연관 관계 : 서로 참조




 - 연관 클래스 : 연관 관계에 있는 클래스들을 한 클래스가 참조






* 일반화(generalization) : 상속 관계



* 집합(aggregation) : 한 객체가 다른 객체를 포함


 - 집약 관계 : 각 객체들의 라이프 타임이 독립적


 - 합성 관계 : 각 객체들의 라이프 타임이 의존적





* 의존(dependency) : 한 클래스가 다른 클래스를 객체 생성, return value, parameter 등으로 참조




* 실체화(realization) : 인터페이스 구현




Posted by @히테
,