Visual C++ 2008 Express 및 Ogre3D SDK를 사용하여 게임을 프로그래밍하고 있습니다.비동기 화면으로 게임 플레이 로직 업데이트, C++
내 핵심 게임 플레이 논리가 초당 100 회 실행되도록 설계되었습니다. 간단히하기 위해 'gamelogic()'이라는 메서드라고 말합니다. 시간 기반이 아니므로 게임 시간을 1 초 앞당기려면 100 회 gamelogic()을 호출해야합니다. 'gamelogic()'은 게임의 화면 렌더링과 비교하여 가볍습니다.
오우거에는 프레임을 그릴 때와 프레임을 그릴 때 코드에 알리는 "청취자"논리가 있습니다. 프레임 렌더링 바로 전에 'gamelogic()'을 호출하면 게임 플레이가 5fps에서 120fps까지 다양 할 수있는 화면 렌더링 속도의 영향을 크게받습니다. 마음에 오는
쉬운 솔루션입니다 : 마지막으로 렌더링 된 프레임 이후의 경과 시간을 계산하고 '() gamelogic'다음 프레임 전에이 여러 번 전화 : 그러나 100 * timeElapsedInSeconds
을, 그 pressume은 " 옳은 "방법은 멀티 스레딩을 사용하는 것입니다. gamelogic() '을 100 번/초 실행하는 별도의 스레드가 있어야합니다.
Ogre가 동시에 화면을 렌더링하는 동안 gamelogic 화면 내용 (3D 객체 좌표)이 서로 다른 두 스레드 사이에 충돌이있을 때 어떻게 할 수 있습니까?
미리 감사드립니다.
게임은 고정 렌더링 속도 가정에서 잠시 전에 프레임 시간을 추적하는 것으로 전환되었습니다. 이전에는 프로세서가 8 Hz에서 실행된다는 것을 알고있었습니다. 16Hz 장비가 출시되었을 때 프로세서를 16Hz에서 8Hz로 전환 할 수있는 '터보 버튼'이 포함되어있어 게임이 여전히 올바른 속도로 작동 할 수있었습니다. 재미있는 사실. – Kieveli
사실! 오래된 게임이 새로운 컴퓨터에서 허용되는 프레임 속도로 실행되도록 프로세서를 "감속"하도록 작성된 작은 응용 프로그램조차있었습니다. 하나는 "MOslo"라고 불렀습니다. 내가 가지고있는 최신 컴퓨터에서 너무 빨리 실행되는 모든 오래된 Ultima 게임을 기억합니다. – Mark
터보 파스칼 런타임에서는 빠른 머신에서 실행될 때 정수 오버플로가 발생하여 모든 것을 충돌시킬 수 있습니다. – tstenner