Elg*_*oog 9 c++ shell console sfml
我的应用程序需要在应用程序窗口中嵌入控制台,例如,在autoCAD中,控制台位于窗口底部等待命令.

我需要在我的应用程序中使用控制台,以便我可以更改变量和其他内容,因此控制台不需要是一个完全爆炸的shell.
目前我的应用程序中有一个简单的控制台,但与终端(shell)相比,它看起来非常笨重,这就是我想要控制台的样子.

我用控制台完成它的方式是当用户按下TAB控制台显示的键时,他们可以输入他们的命令/行; 一旦Return按下了键,就会解析它们键入的字符串并处理该命令.
我正在使用sf::Text对象在我的应用程序窗口中打印文本.总共使用了5个sf::Text对象,4个用于以前的命令/错误消息,1个用于当前命令行.当Return按下该键时,第4个sf::Text将其当前字符串更改为第3个,第3个到第2个,第2个到第1个,第1个更改为当前命令字符串,然后当前命令字符串被清除并准备再次输入.这样就有4个"历史"命令和/或错误的空间.不是最好的,但它是我能想到的最好的.当然,可以通过添加更多sf::Text对象来更改历史记录的数量.所以最后这就是我将控制台渲染到屏幕的方式
sf::RectangleShape rectangle;
rectangle.setSize(sf::Vector2f(App->getSize().x, App->getSize().y / 3));
rectangle.setPosition(0, 0);
rectangle.setFillColor(sf::Color::black);
App->draw(rectangle); // This renders the console looking background rectangle
App->draw(CLine); // This renders the current command line
for(int i = 4; i >= 0; --i) // This renders the history as described above, their idevidual positions are setup earlier on in the program
{
CHistory[i].setString(CS[i]);
App->draw(CHistory[i]);
}
Run Code Online (Sandbox Code Playgroud)
App 只是一个 sf::RenderWindow*
我的整体问题是,有没有办法可以将控制台嵌入到我的SFML窗口中,而不必仅仅是一个文本对象的图像,就像我上面那样呈现为控制台.我希望在我的应用程序中有一个实际的控制台/ shell /终端.像标准的bash shell一样,但当然是我自己的shell解释器.
好吧,如果你想让它感觉更像一个控制台,你可能想要的是:
~,它被经常使用。cl_与渲染相关的前缀。参见cl_showfps 1例如。--help也会很好。当然,这取决于您的游戏的复杂程度。其余的,看看其他游戏是如何做到这一点的。您提到了《Quake》,它是游戏内终端的一个很好的例子。我认为很多 Source 游戏中的那个也很容易使用(参见《半条命 2》、《反恐精英 Source》、《军团要塞 2》、《求生之路 4》等)。我认为没有任何标准库可以实现这一点,不包括其他框架,如 OGRE 或 IrrLicht。