我正在写一个老式的 ASCII DOS 提示游戏。老实说,我正在尝试模仿 ZZT 来了解更多关于这个品牌的游戏设计(即使它已经过时了)
我做得很好,我的全屏文本模式可以工作,我可以毫无问题地创造世界和四处走动,但我找不到合适的渲染时间方法。
我知道我的渲染和预渲染代码很快,因为如果我不从 time.h 添加任何 delay()s 或 (clock()-renderBegin)/CLK_TCK 检查,渲染速度非常快。
我不想使用 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。
我虽然可能因为我不断调用所有这些时钟()和“除以”方法,我正在减慢 CPU 速度,但当我从 if 语句的括号中取出渲染和 ballLogic 调用并将 RenderInterval 设置为0.0 我再次获得了超快的渲染速度。
这对我来说没有任何意义,因为如果我离开 if check in,它不应该运行得一样慢吗?我的意思是它仍然需要做所有的计算
顺便说一句,我正在使用 Borland 的 Turbo C++ V1.01 进行编译