C++ OpenGL";油漆;程序

C++ OpenGL";油漆;程序,c++,opengl,glut,paint,C++,Opengl,Glut,Paint,我正在进行一个项目,该项目将模拟Microsoft paint中的许多功能。为了实现这一点,我使用了glutMotionFunc来控制画笔,当鼠标拖动时画笔会绘制给定的形状。它会改变颜色、旋转等。。。我希望每次按下“b”时都能循环笔刷笔划形状,但我无法在“b”框内迭代以跟踪它被按下的次数 我也不确定,即使在这种情况下,我的mouseMove函数是否会识别出笔刷笔划的变化 void keyboard ( unsigned char key, int x, int y ) { Paint_b

我正在进行一个项目,该项目将模拟Microsoft paint中的许多功能。为了实现这一点,我使用了glutMotionFunc来控制画笔,当鼠标拖动时画笔会绘制给定的形状。它会改变颜色、旋转等。。。我希望每次按下“b”时都能循环笔刷笔划形状,但我无法在“b”框内迭代以跟踪它被按下的次数

我也不确定,即使在这种情况下,我的mouseMove函数是否会识别出笔刷笔划的变化

void keyboard ( unsigned char key, int x, int y )
{
    Paint_begin newPaint;
    int bPressed = 0;

    switch ( key )
    {   

        case 'b':
            bPressed=bPressed+1;
            newPaint.readyPaint(true);
            printf("bPressed:  %d\n", bPressed);
            newPaint.setShape(bPressed);
            break;

        //... extra code unrelated to my problem

    }
    glutPostRedisplay ( );
}
和鼠标移动功能(运动功能):

你开始上课了

class Paint_begin{

    public:
        static int sizeDraw, readyP, shape;

        void readyPaint(int paint){
            sizeDraw = 1;
            readyP = paint;
            shape = 0;
        }

        void setShape(int shape){
            shape = shape;
        }

        int getShape(){
            return shape;
        }

};

矩形工作正常,但我担心这只是因为shape变量被初始化为0。跟踪printf语句中的“bPressed”得到1,1,1,而不管它实际被按下了多少次。

如果您想跟踪您按下“b”按钮的次数,有两种可能:

void keyboard ( unsigned char key, int x, int y )
{
    static int bPressed = 0;
    //...
}
使变量只初始化一次,然后每次调用函数时它都会存储上一个值


另一种方法是将
bPressed
声明为全局变量,以便在调用方法时不会初始化其值。

变量bPressed的可能副本将始终为0或1,因为它在输入键盘后立即初始化为0(我假设它是按键的回调)。你需要保持状态。可能包括在类中包装
keyboard()
,或者使用static关键字。哇,有时候你会忘记一些小事情。谢谢,我使bPressed成为一个全局变量,然后在mouseMove函数中,我使if语句依赖于bPressed值,而不是paintNew.shape
void keyboard ( unsigned char key, int x, int y )
{
    static int bPressed = 0;
    //...
}