2015-10-17 82 views
-3

如何显示一个计时器,每10毫秒不断递增。我已经有一个函数X,它调用glutTimerFunc(10, X, 0);并每次增加timer的值0.1,但问题是在窗口中某个位置显示计时器本身的值。我尝试使用一种方法来打印这些值,并在我的Display()方法中调用该方法,该方法在glutDisplayFunc(Display)中,但由于某种原因无法正常工作。该方法的代码如下。显示计时器GLUT游戏

void displayTimer(void * font, int z, float x, float y) 
{ 
    glRasterPos2f(x, y); 
    glutBitmapCharacter(font, z); 
} 
+2

“不能正常工作”对您的问题不是很好的描述。它显示一个意外的价值,或在错误的位置,或其他? –

+2

顾名思义,'glutBitmapCharacter'不是[应该写一个数字](https://www.opengl.org/documentation/specs/glut/spec3/node76.html)。 – usr2564301

回答

1

根据displayTimer()函数的标题,看起来您正试图在屏幕上显示z坐标而不是您想要的实际计时器。

首先,我建议将'z'参数重命名为'text'并将其数据类型更改为std :: string。然后,您可以将您的计时器值作为字符串传递给您的displayTimer()函数。接下来,您将不得不循环访问“文本”字符串,以便在屏幕上逐字显示它(字符)。

下面是一个例子你的函数会是什么样子:

void displayTimer(void * font, std::string text, float x, float y) 
{ 
    glRasterPos2f(x, y); 
    for (string::iterator i = text.begin(); i != text.end(); ++i) 
    { 
     char c = *i; 
     glutBitmapCharacter(font, c); 
    } 
} 

我不知道你的代码是如何组织的,但如何与您的显示器一起使用X()函数一例()函数到在屏幕上显示的定时器值将是如下:

#include <string> 

std::string timerValue; 
void * textFont; 

void X(int value) 
{ 
    timerValue = std::to_string(value); 
} 

void displayTimer(void * font, std::string text, float x, float y) 
{ 
    glColor3f(0.0f, 1.0f, 0.0f); // Set color to green purely for testing. 
    glRasterPos2f(x, y); 
    for (string::iterator i = text.begin(); i != text.end(); ++i) 
    { 
    char c = *i; 
    glutBitmapCharacter(font, c); 
    } 
} 

void Display() 
{ 
    displayTimer(textFont,timerValue,10.0f,20.0f); 
} 

int main(int argc, char* argv[]) 
{ 
    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); 

    timerValue = 0; 
    textFont = = GLUT_BITMAP_HELVETICA_18; 

    glutTimerFunc(10,X,0); 
    glutDisplayFunc(Display); 

    glutMainloop(); 

    return 0; 
} 

通知数据如何炭传递给glutBitmapCharacter在displayTimer()函数而不是AZ整数()函数。提示:为避免某些编译器警告,将x和y displayTimer()函数参数的数据类型更改为GLfloat,因为这是用于glRasterPos2f()函数的数据类型。