gpt4 book ai didi

c++ - 将键盘输入的文本打印到 GLUT 窗口?

转载 作者:行者123 更新时间:2023-11-28 06:17:35 25 4
gpt4 key购买 nike

试图显示在键盘上键入的字符,我使用以下代码:

 void myKey(unsigned char key, int x, int y)
{
if (key == 13) // enter key
{
return;
}
glRasterPos2f(xpos, 600);
glColor3f(0.0, 0.0, 1.0); // text color
glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24, key); // print the color

glFlush();
xpos += 15;
player1[i] = key;
i += 1;
}

它会将输入的文本打印到屏幕上,但是当我按下 enter 时,它并没有像预期的那样退出。我希望代码显示 player1 的玩家名称并将其存储在数组中,然后在我按 enter 时退出,然后继续接受第二个玩家名称。

最佳答案

仅在显示回调中执行 OpenGL 操作。

您需要将文本条目分成两部分:

  1. glutKeyboardFunc() 回调中的键盘/数组处理。完成修改名单后,发布重新显示事件。
  2. glutDisplayFunc() 回调中呈现字符串,您在其中迭代名称 vector 并显示每个字符串。

像这样:

#include <GL/freeglut.h>
#include <sstream>
#include <string>
#include <vector>

using namespace std;

vector< string > names( 1 );
void keyboard( unsigned char key, int x, int y )
{
if( key == 13 )
{
// enter key
names.push_back( "" );
}
else if( key == 8 )
{
// backspace
names.back().pop_back();
}
else
{
// regular text
names.back().push_back( key );
}

glutPostRedisplay();
}

void display()
{
glClear( GL_COLOR_BUFFER_BIT );

glMatrixMode( GL_PROJECTION );
glLoadIdentity();
double w = glutGet( GLUT_WINDOW_WIDTH );
double h = glutGet( GLUT_WINDOW_HEIGHT );
glOrtho( 0, w, 0, h, -1, 1 );

glMatrixMode( GL_MODELVIEW );
glLoadIdentity();

for( size_t i = 0; i < names.size(); ++i )
{
ostringstream oss;
oss << ( i + 1 ) << ": " << names[i];

void* font = GLUT_BITMAP_9_BY_15;
const int fontHeight = glutBitmapHeight( font );
glRasterPos2i( 10, h - ( fontHeight * ( i + 1 ) ) );
glutBitmapString( font, (const unsigned char*)( oss.str().c_str() ) );
}

glutSwapBuffers();
}

int main( int argc, char **argv )
{
glutInit( &argc, argv );
glutInitDisplayMode( GLUT_RGBA | GLUT_DOUBLE );
glutInitWindowSize( 640, 480 );
glutCreateWindow( "GLUT" );
glutDisplayFunc( display );
glutKeyboardFunc( keyboard );
glutMainLoop();
return 0;
}

关于c++ - 将键盘输入的文本打印到 GLUT 窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29944062/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com