我有几个if语句,如果其中一个是真的,它会在屏幕上打印一个字符。
char d = 'a';
char c = 'b';
if(A == TRUE) //see comments below
{
Print(200,200,d);
}
if(B == TRUE)
{
Print(200,200,c);
}
void Print(int x, int y, char u)
{
glRasterPos2f(x,y);
glutBitmapCharacter(GLUT_BITMAP_HELVETICA_18, u);
}
问题在于,如果A为真,它将在屏幕上正确打印'a',但如果之后B为真且A不再,它将在屏幕上打印'b'而字符'a'仍然是那里。如何解决这个问题,以便屏幕上只有一个字符。任何帮助将不胜感激。
非常感谢datenwolf。最重要的是将glutPostRedisplay放在正确的位置。我将它放在我的void Print(..)函数的末尾。我只是看着我应该把它放在哪里,对我来说这个现在有效(这只是一个很小的调整)。
答案 0 :(得分:1)
OpenGL的设计建立在前提下,如果有任何需要改变的话,会重新绘制while窗口。通常,所有绘图操作都应仅从中央显示功能完成。需要反映在屏幕上可见内容的更改应通过准备要绘制的内容列表来处理,然后发出完整的重绘事件。
实际上你有一个完全不同的问题
在声明中if(A = TRUE)
发生了两件事:
A
被分配了值TRUE
该任务的结果(即为TRUE)是针对真理进行测试的,因此它将永远通过。
if(B = TRUE)
同样如此。
正确使用的运算符是==
(连续两个等号)。对于大多数编译器,您可以启用警告并将其转换为错误,在分支语句中不允许分配。风格方法是将相等的测试编写为
if( TRUE == A )
避免像你这样的事故。但是在你的情况下,你可以简单地写
if( A )
根本没有任何比较运算符。我强烈建议你这样做。