【问题标题】:"Slowing" output“减速”输出
【发布时间】:2012-06-29 15:49:16
【问题描述】:

我有一个问题我不知道如何解释好,但我会尝试...例如,在某些游戏中,文本输出“慢”,一个接一个地写入字符,而不是所有的一次短语...那么,我该如何复制这种行为?

我是这样想的...我可以做一个循环,在其中写一个字符并休眠 1 毫秒,写一个字符并休眠,等等...还有另一种方法,或者这是唯一/最好的/我可以实现这个技巧的简单方法?我正在尝试在 C++ 中执行此操作,但欢迎提出其他建议。

【问题讨论】:

  • 你可以创建一个类来帮助你完成你所描述的事情。然后您可以轻松地重复使用它。
  • 你有游戏的主循环吗?如果是这种情况,您通常可以有一个时间参考,无论是您自己的还是基于真实时钟的

标签: c++ character


【解决方案1】:

嗯,是的,usleep 是一种解决方案,但你应该线程化它,否则它也会减慢你的游戏速度。不过,从视觉上讲,1ms 可能还不够。我建议你做一些测试才能看到。

输出?是在终端上制作的?如果是这样,也许您也可以使用一些术语容量。

编辑:你也可以使用时钟!!

【讨论】:

  • 输出将在文本区域中......你是什么意思使用时钟?
  • 承认你在一个循环中并且你想要一个精确的暂停(而不是像 sleep() 调用那样依赖于性能),比如说 1 秒,你首先得到 clock() 或 ctime()打印字母,然后使用 if 语句比较经过的时间,当它达到 1 秒时,您打印另一个字母并重新初始化时钟/时间等等......我希望我足够清楚。
【解决方案2】:

如果您问我,使用单独的线程来更新一段文本会有点浪费资源。 我建议这样做的方法是定义一些应该在一秒钟内显示在屏幕上的字符,然后计算自上次更新文本以来的毫秒数。然后你乘以那个值

例子:

float charsPerSecond = 60/1000;
float lastUpdated;
...
int nrChars = (int) (charsPerSecond * (currentTime - lastUpdated));
//output nrChars characters
lastUpdated = currentTime;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多