c++ 当接收到键输入时,输出应停止流,并延迟一段时间,然后立即将其全部输出

pkwftd7m  于 2022-12-05  发布在  其他
关注(0)|答案(1)|浏览(104)

著名的文本滚动效果已经在 * 许多 * 游戏中使用,我的意思是许多基于控制台的RPG游戏。
作为一个新手,我有点想自己做一个项目来提高我的C++技能,* 然而 ,我被困在了某个地方。
你看,当一串文本在滚动时,玩家最终会感到无聊,想跳过这些文本。发生的事情是,当玩家按下某个键时,文本停止滚动(
滚动的意思是吐出索引为i的字符串中的字符,稍微延迟 *),它会立即吐出所有内容。
这正是我试图复制的效果。
这是我目前使用的(没有跳过效果):

for(int i = 0; i<text.length();i++)
{
  std::cout << text[i];
  Sleep(200);//WINAPI function for timeout. DWORD Milliseconds as argument
}

我想要的是:

for(int i = 0; i<text.length();i++)
{
      std::cout << text[i];
      if(GetAsyncState(VK_RETURN)
      {
        continue;
      }
      
      else{
        Sleep(200);//WINAPI function for timeout. DWORD Milliseconds as argument
      }
      
      
}
  • 这是非常新手的代码,所以请不要批评我。*

所以我用我的问题来结束这段闹剧:
如何停止文本流的延迟,并使其一次输出。
祝你愉快!

vwhgwdsa

vwhgwdsa1#

要停止文本流并使其立即输出,您可以使用布尔变量跟踪文本是否仍在滚动。在for循环中,您可以检查播放器是否按下了应停止文本滚动的键。如果播放器按下了该键,您可以将布尔变量设置为false以指示文本应停止滚动。然后,您可以继续输出字符串中的其余字符,而不会有任何延迟,因为文本不再滚动。
下面是一个如何实现这一点的示例:

// Declare a boolean variable to track whether the text is still scrolling
bool scrolling = true;

for (int i = 0; i < text.length(); i++) {
  // Check if the player has pressed the key to stop the text from scrolling
  if (GetAsyncState(VK_RETURN)) {
    // Set the scrolling variable to false to stop the text from scrolling
    scrolling = false;
  }

  // Output the character at the current index
  std::cout << text[i];

  // If the text is still scrolling, add a delay
  if (scrolling) {
    Sleep(200);
  }
}

这个程式码会持续输出字串中的每个字符,但会有一段延迟,直到播放程式按下按钮停止卷动文字为止。当播放程式按下按钮时,文字会停止卷动,而字串中的剩馀字符会毫无延迟地输出。

相关问题