首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ASCII DOS游戏渲染方法

ASCII DOS游戏渲染方法
EN

Stack Overflow用户
提问于 2010-07-22 20:54:03
回答 5查看 960关注 0票数 9

我正在写一个老式的ASCII DOS提示游戏。老实说,我正在尝试效仿ZZT来学习更多关于这个品牌的游戏设计(即使它已经过时了)。

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

我知道我的渲染和预渲染代码很快,因为如果我不添加任何-renderBegin()s或(clock()/CLK_TCK) time.h的延迟检查,渲染就会非常快。

我不想使用delay(),因为它是特定于我的知识平台的,最重要的是,我不能在它延迟的时候运行任何代码(比如用户输入和处理)。所以我决定这样做:

代码语言:javascript
复制
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语句的括号中取出render和ballLogic调用,并将RenderInterval设置为0.0时,我再次获得了惊人的渲染速度。

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

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

EN

Stack Overflow用户

发布于 2010-07-22 21:14:26

这样怎么样:你从x (=clock()) y (=renderTimer)中减去。X和y都被CLOCKS_PER_SEC除以:

代码语言:javascript
复制
clock()/CLOCKS_PER_SEC-renderTimer/CLOCKS_PER_SEC > RenderInterval

这样写不是更有效率吗:

代码语言:javascript
复制
( clock() - renderTimer ) > RenderInterval

我看到的除法的第一个问题是,你不会从除法中得到一个实数,因为它发生在两个长整数之间。第二个问题是乘以RenderInterval * CLOCKS_PER_SEC更有效,这种方法消除了它,简化了操作。

添加括号使其更易读。也许通过简化这个phormula,你会更容易出问题。

票数 0
EN
查看全部 5 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3309006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档