在 C++ 中的 glutIdleFunc() 中变量值未递增

Posted

技术标签:

【中文标题】在 C++ 中的 glutIdleFunc() 中变量值未递增【英文标题】:Variable value not being incremented in glutIdleFunc() in C++ 【发布时间】:2018-10-11 21:39:34 【问题描述】:

一旦我点击键盘上的字母“b”,我就会尝试不断增加变量bulletY,直到达到最大 y 值窗口大小以产生射击效果。但是bulletY 只会增加一次。

这里是 bool 标志和 double 使用的初始值:

bool shoot = false;
bool isDone = false;
double bulletX = 8000 ;
double bulletY = -1;
double plusX = 0;
double plusY = 0;

下面是处理按键输入的方法

void key(unsigned char k, int x, int y)//keyboard function, takes 3 parameters
                                    // k is the key pressed from the keyboard
                                    // x and y are mouse postion when the key was pressed.

    if (k == 'b')  //SHOO
        shoot = true;
    

    glutPostRedisplay();//redisplay to update the screen with the changes

最后这是我创建的Anim 函数,用于传递给空闲函数glutIdleFunc(Anim)

void Anim()
if (shoot==true) 
        bulletX = plusX;
        bulletY = plusY;
        isDone = true;
    

            if (isDone&& bulletY<450) 
                bulletY += 1;
                std::cout << "bullet Y is currently at : " << bulletY << "\n";
            
            else 
                isDone = false;
                shoot = false;
            
        glutPostRedisplay();
    

【问题讨论】:

@wdc 我有另一个对象,它的翻译值 plusXplusY 我希望在单击键盘按钮 b 时项目符号具有相同的初始翻译值 【参考方案1】:

似乎bulletY 在你的Anim() 函数中总是重置为0,然后递增1,所以bulletY 一直是1。

删除bulletY = plusY(0),它应该在每次迭代中递增。

【讨论】:

以上是关于在 C++ 中的 glutIdleFunc() 中变量值未递增的主要内容,如果未能解决你的问题,请参考以下文章

opengl如何把glutIdleFunc的帧数调低,感觉转动时速度太快,可以不调角度来让旋转变慢么?

如何在 glfw 中 glutDisplayFunc、glutMainLoop?

提升成员函数指针

从 glutMainLoop() 中调用函数

glReadPixels 为空时如何生成屏幕截图?

OpenGL glut库