이페이지는? ¶
- 우리가 만든 프로그램이 어떤 하드웨어에서던지 일정한 속도로 돌아가기를 바라는 경우가 있다. 특히 게임을 만드는 경우가 대표적인 예이다. 그러한 경우 어떠한 해결책이 있는지 알아 보면 좋을거 같다. 여기에 그 해결책들을 적어 보고 잘못된 방법은 고치기도 하면서 좋은 방법을 찾으면 좋겠다.
사례 ¶
- 3DAlca프로젝트에서 이 게임을 펜티엄3 800 지포트2 MX 에서 돌렸을때는 정상 속도로 게임이 돌아 가는데 펜티엄 4 1.8GA Raden 9000 pro 에서는 거의 제어할 수 없는 속도가 나온다.
해결책 ¶
- 아래는 제가 조사해본 내용인데 추상적이거든여.. 실제 사용예 같은거 있으면 자료 올려 주시면 좋겠습니다.
- Game 의 Tick 에 해당되는 함수를 idle에 넣지 말고 타이머마다 화면 그려주는 함수를 실행한다.
- 스레드 & 1초 쉬고 (이건 HiPerformanceTimer 관련 함수를 이용하는 방법)
- 작동하는 속도를 피드백 받아서 프레임을 줄여 제작한다
- 타이머를 이용해서 시간에 따라 움직이도록 한다.
- 이걸로 해결 봤습니다. MFC에서는 타이머를 써봤는데 API에서는 어떻게 쓰는지 몰라서 못했었는데, 정직이형에게 물어봐서 알게 되어서 위 문제를 해결~
- hardware independent하게 게임속도를 유지하려면 매프레임 그릴때마다 이전프레임과의 시간간격을 받아와서 거기에 velocity를 곱해 position을 update하는 식으로 해야한다. 타이머를 하나 만들어 보자.
- 궁금한게 있는데, MFCStudy_2001/MMTimer 로 안된단 말이야? 가장 빠른걸로 알고 있어서, 동작 제어는 타이머단에서 하고, loop에서 열심히 그림 그려서 fliping만 해주면 되지 않을까? 낮에는 경황이 없어서, 그냥 멀티미디어 타이머 이야기만 했는데, winamp 같은 시간에 의존적인 프로그램들도 이 타이머를 사용해서 말이지. --neocoin
- 허허.. 인스톨 과정에 재컴파일을 넣으면 되지 않을까 소스배포! 그것이야말로 남자(?)의 로망.. --zennith
- 비슷한건데.. 스레드와 timer 를 같이 써서 해결하기도 하지.. -_-; 아는 형 중에 그렇게 하던데.. dx 쓸때.. source 는 모르겠고.. mfc 에서 dx 쓸때 그렇게 한다고 하더라.. 뭐 네가 말하는 문제의 해결책이 될듯 하기도 하고.. -- erunc0