나는 오래된 학교의 ASCII 도스 프롬프트 게임을 쓰고있다. 솔직히 ZZT를 에뮬레이션하여이 브랜드의 게임 디자인에 대해 자세히 알기 위해 노력하고 있습니다. (심지어 구식이라 할지라도)ASCII 도스 게임 - 렌더링 방법
나는 잘하고 있고, 전체 화면 텍스트 모드가 작동하며 세계를 만들고 움직일 수 있습니다. 주위에 문제없이하지만 내 렌더링을위한 적당한 타이밍 방법을 찾을 수 없습니다.
delay() 또는 (clock() - renderBegin)/CLK_TCK 검사를 time.h에서 추가하지 않으면 렌더링 속도가 매우 빠르기 때문에 내 렌더링 및 사전 렌더링 코드가 빠르다는 것을 알고 있습니다.
delay()를 사용하고 싶지 않습니다. 내 지식 플랫폼에서 특정 지연 시간 동안 (사용자 입력 및 처리처럼) 코드를 실행할 수 없기 때문에 지연을 사용하고 싶지 않습니다. 그래서 저는 다음과 같이하기로했습니다 :
do {
if(kbhit()) {
input = getch();
processInput(input);
}
if(clock()/CLOCKS_PER_SEC-renderTimer/CLOCKS_PER_SEC > RenderInterval) {
renderTimer = clock();
render();
ballLogic();
}
}while(input != 'p');
"이론"은 잘 작동해야합니다. 문제는이 코드를 실행할 때 (RenderInterval을 0.0333 또는 30fps로 설정하면) 아무 것도 30fps에 가깝지 않게되고, 최대 18 개 정도가됩니다.
RenderInterval을 0.0으로 설정하면 성능이 올라 갔는지 알 수있을 것 같았습니다 ... 그렇지 않았습니다. 저는 (RenderInterval이 0.0 인) 최대 ~ 18-20fps로 증가했습니다.
나는이 모든 clock()과 "divide by this that"메서드를 사용하여 무언가 무서운 CPU 속도를 늦추고 있었기 때문에 어쩌면 그렇게했을지 모르겠다.하지만 render와 ballLogic에서 if 문의 괄호 RenderInterval을 0.0으로 설정합니다. 다시 말해서, 놀랍도록 빠른 렌더링을 얻습니다.
내가 체크 인을 남겨두면 느리게 실행하면 안되니? 나는 여전히
BTW내가 볼랜드의 터보 C로 컴파일하고있어 ++ V1.01 모든 계산을 수행하는 의미
ZZT를! 나는 그 게임을 좋아했다. – caf
너와 나 둘 다, caf. ('#throwstar seek'). @ Parad0x13 : 도스에서 벗어나도 괜찮다면 SDL에서 지원하는 모든 플랫폼에서이 그래픽 스타일을 에뮬레이트 할 수있는 라이브러리를 작성했습니다 : http://libfake437.googlecode.com –
'clock()에서 결과를 저장하면) '그것을 저장하고 할당 된 값을 지정하면 호출을 저장합니다 (가장 빠른 코드는 호출하지 않는 코드입니다). 그러면 더 정확해질 것입니다 (그렇지 않으면 처음에'clock() ' , 모든 수학을했고 지부를 다루었 다.) 이러한 정확성의 상실로 더 이상 CPU 사용량을 극대화하지 않더라도 원하는만큼 느리게 게임이 실행됩니다. (편집 : 하하, 그냥 이것에 날짜를 보았다, 오 잘) –