2015-10-14 68 views
1

我想使用sin函數在水平移動時使形狀執行跳轉,但當它按下時它甚至不響應「j」按鈕? 我仍然在學習Opengl。任何關於錯誤在哪裏的幫助?當按下OPENGL上的一個按鍵時,我的形狀不想移動

#include <GLUT/glut.h> 
#include <math.h> 

float pointone = 0; 
float ydir =0; 
GLboolean turn ; 
void Display(); 
void DrawWall(); 
void Anim(); 
void Keyboard(unsigned char key, int x, int y); 

int main(int argc, char** argr) { 
    glutInit(&argc, argr); 
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); 
    glutInitWindowSize(1000, 600); 
    glutInitWindowPosition(50, 50); 
    glutKeyboardFunc(Keyboard); 
    glutIdleFunc(Anim); 
    glutCreateWindow("Kbeer El Haramiya"); 
    glutDisplayFunc(Display); 
    glClearColor(0.0f, 0.0f, 0.0f, 0.0f); 
    glPointSize(20.0); 
    gluOrtho2D(0.0, 1000.0, 0.0, 600.0); 
    glutMainLoop(); 
} 

void Display() { 
    glClear(GL_COLOR_BUFFER_BIT); 
    DrawWall(); 
    glPushMatrix(); 
    if(pointone<=850 && turn ==true){ 
     pointone+=3; 
     turn=true;} 
    else if (pointone==0){ 
     turn=true;} 
     else { 
     turn = false; 
     pointone-=3; 
     } 
    glTranslatef(pointone, ydir, 0); 
    glBegin(GL_POLYGON); 
    glColor3f(0.97f,0.96f,0.768f); 
    glVertex2i(0.0f, 0.0f); 
    glVertex2i(50.0f, 0.0f); 
    glVertex2i(50.0f, 50.0f); 
    glColor3f(0.70f,0.196f,0.12f); 
    glVertex2i(0.0f, 50.0f); 
    glEnd(); 
    glPopMatrix(); 
    glFlush(); 

} 

void DrawWall(){ 
    glBegin(GL_POLYGON); 
    glColor3f(0.97f,0.96f,0.768f); 
    glVertex2i(999, 0); 
    glVertex2i(999,600); 
    glVertex2i(900, 600); 
    glVertex2i(900, 0); 
    glEnd(); 
    glBegin(GL_POLYGON); 
    glVertex2i(0, 200); 
    glVertex2i(700,200); 
    glVertex2i(700, 150); 
    glVertex2i(0,150); 
    glEnd(); 
} 

void Keyboard(unsigned char key, int x, int y){ 
    if(key == 'j') { 
     for(int i =0; i<361;i++){ 
     ydir =sin(i); 
     glutPostRedisplay(); 
    } 

} 

} 
void Anim(){ 
    glutPostRedisplay(); 
} 

回答

0

解決辦法很簡單,我應該叫Keyboardfunc之前創建的窗口! :)

0

您必須更新ydirDisplay()函數中的某處。當您嘗試在循環外對其進行更新時,在Keyboard函數結束後,只會安排一次重繪。

代碼可以看看(例如)在某種程度上是這樣的:

int yint = -1; //-1 means no moving 

void Display() { 
    if (yint > 360) // Reset when > 360° 
     yint = -1; 
    if (yint >= 0 && yint <= 360) //Update until 360° is reached 
     yint++; 

    float ydir = sin(yint); 

    //Draw code here 
} 

void Keyboard(unsigned char key, int x, int y){ 
    if(key == 'j') 
     yint = 0; 
} 
相關問題