我正在尝试使用OpenGL和C ++创建游戏引擎,而没有OpenGL本身以外的任何外部库。接收键盘/鼠标输入的最佳方法是什么?我知道std::cin
可以工作,但是它会停止线程并将其放在另一个线程上很烦人。感谢有人回答这个问题!
答案 0 :(得分:0)
不想使用任何库使您的生活变得更加艰难。没有库的唯一实际选项是std :: cin。
std :: cin实际上能够实时为您提供输入,而无需用户按回车键。大部分时间您必须按Enter的原因是由于您的终端。基本上,终端的默认输出是“煮熟的”,这意味着终端本身(不是C ++)会等待用户按下Enter键,然后将输入交给C ++进行操作。但是,您可以将终端设置为原始输出,并且std :: cin将在输入时获得输入。签出此程序:
#include <stdlib.h> // for using system()
int main() {
system("stty raw");
char that;
while(cin >> that) {
cout << that;
}
它将在接收到输入时读取输入,并立即将其打印回给用户。第一个system()命令将终端设置为处于原始输出模式,即终端将收到的输入立即吐出给C ++进行处理。该system()命令取决于OS。我的机器在Mac OS上运行,并且可以运行。如果运行Windows,则可能需要其他命令。
因此,简而言之,std :: cin可用于实时键盘输入。
但是不应该这样,因为您也需要鼠标输入。没有标准的C ++库可以处理鼠标输入,几乎任何可以处理鼠标输入的库都可以处理键盘输入。我认为您可能是一个初学者(如果您不是初学者,则不是故意的),但是如果您尝试使用ncurses(http://tldp.org/HOWTO/NCURSES-Programming-HOWTO/index.html)或SDL(https://wiki.libsdl.org/FrontPage,教程@ http://www.sdltutorials.com/)< / p>
根据您的发言,您应该使用SDL。 OpenGL和SDL的接口非常简单。您可以只在SDL中创建一个窗口,告诉该窗口具有OpenGL上下文,然后像往常一样执行OpenGL命令,并将它们放在SDL窗口中。 SDL还具有您需要的所有键盘和鼠标输入功能。您甚至都不需要学习有关SDL的所有知识,您所需要的只是有关它的基础知识,而且您很高兴上手。
不要担心使用另一个库的麻烦。如果您足够聪明,可以使用OpenGL(一种非常硬的语言),那么您足够聪明,可以设置SDL。 :)