C++ OpenGL";油漆;程序
我正在进行一个项目,该项目将模拟Microsoft paint中的许多功能。为了实现这一点,我使用了glutMotionFunc来控制画笔,当鼠标拖动时画笔会绘制给定的形状。它会改变颜色、旋转等。。。我希望每次按下“b”时都能循环笔刷笔划形状,但我无法在“b”框内迭代以跟踪它被按下的次数 我也不确定,即使在这种情况下,我的mouseMove函数是否会识别出笔刷笔划的变化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
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;
//...
}