ASCII DOS游戏 - 渲染方法

Par*_*x13 9 c++ ascii render dos turbo-c++

我正在写一个老式的ASCII DOS-Prompt游戏.老实说,我正试图效仿ZZT,以了解更多关于这个品牌的游戏设计(即使它已经过时)

我做得很好,让我的全屏文本模式工作,我可以创建世界和移动没有问题但我找不到一个像样的方法我的渲染.

我知道我的渲染和预渲染代码很快,因为如果我不添加任何延迟()或(time() - 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');
Run Code Online (Sandbox Code Playgroud)

哪个应该在"理论"中工作得很好.问题是,当我运行此代码(将RenderInterval设置为0.0333或30fps)时,我不会得到接近30fps的任何地方,我最多会得到18.

我想也许我会尝试将RenderInterval设置为0.0以查看性能是否已经启动......它没有.我(RenderInterval为0.0)达到最大值~18-20fps.

我可能因为我不断调用所有这些clock()和"除以这个"方法,我正在减慢CPU的速度,但是当我把渲染和ballLogic调用if语句的括号并将RenderInterval设置为0.0我再次得到了极快的渲染效果.

这对我来说没有任何意义,因为如果我离开if if check in,它不应该运行得那么慢吗?我的意思是它仍然需要做所有的计算

顺便说一句,我正在编译Borland的Turbo C++ V1.01

Ofi*_*fir 1

clock()-renderTimer > RenderInterval * CLOCKS_PER_SEC
Run Code Online (Sandbox Code Playgroud)

计算速度会更快一点,如果您预先计算RenderInterval * CLOCKS_PER_SEC零件,可能会更快。