我正在开发一个项目,用于模拟Microsoft绘制中的许多功能。为了实现这一点,我使用了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 ( );
}
和mouseMove函数(运动函数):
void mouseMove ( int x, int y )
{
Paint_begin paintNew;
if(paintNew.shape==0){
glRecti(x,y, x+paintNew.sizeDraw, y+paintNew.sizeDraw);
}
glFlush();
if(paintNew.shape==1){
glBegin(GL_TRIANGLES);
glVertex2f(x, y+paintNew.sizeDraw);
glVertex2f(x+paintNew.sizeDraw, y);
glVertex2f(x, y);
glEnd();
}
//glutPostRedisplay ( );
}
和Paint_begin类
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;
}
};
矩形工作正常,但我担心这只是因为形状变量初始化为0.跟踪“bPressed”的printf语句产生1,1,1,无论实际按下多少次。
答案 0 :(得分:1)
如果您想跟踪按下“b”按钮的次数,您有两种可能:
void keyboard ( unsigned char key, int x, int y )
{
static int bPressed = 0;
//...
}
这样变量只初始化一次,然后每次调用函数时它都会存储前一个值。
另一种方法是将bPressed
声明为全局变量,以便在调用方法时不会初始化其值。