2016-01-02 21 views
1

我正在製作一個遊戲,其中我的玩家是一個精靈,它隨着我按下右鍵或向上鍵(跳轉和運行)而改變,因爲我在pressKeySpecial和releaseKeySpecial中編寫了「GlutPostRedisplay」。之後,我做了一些動畫,爲此我製作了一個使用GlutPostRedisplay的定時器功能(glutTimerFunc)。現在問題是當我按下右鍵時,我的播放器不斷在某個地方更改它的精靈圖像以「跑步」。我知道它是因爲我已經在計時器中設置了GlutPostRedisplay,因此它會繼續重新顯示精靈,但是如果我從定時器函數中刪除了GlutPostRedisplay,那麼其餘的動畫將停止並僅在按下該按鍵時才起作用。如何處理GlutPostRedisplay?

我很困惑在哪裏實際設置GlutPostRedisplay調用,以便我所有的動畫和播放器都能正常工作?我也嘗試過glutIdleFunc,但結果保持不變。

void pressKeySpecial(int key,int x,int y) 
{ 
    switch (key) 
    { 

     case GLUT_KEY_LEFT: 

     break; 

     case GLUT_KEY_RIGHT: 

       m.changePosition(10.0,0); 
       m.changeMode(Mario::RUN); 
       break; 

     case GLUT_KEY_UP: 

      if(m.pos_Y<12) 
      { 
       m.changePosition(0,9); 
       m.changeMode(Mario::JUMP); 
      } 
      break; 

    } 
    glutPostRedisplay(); 
} 

// TIMER 
void Timer(int value) 
{ 
    t +=205; 
    t1 +=705; 
    down -=5; 
    angle +=5; 
    SplashTimer +=1; 
    glutTimerFunc(30, Timer, 1); 
    //glutIdleFunc(Timer); 
    glutPostRedisplay(); 
} 
+0

顯示一些代碼,而不只是寫它。 –

+0

@BogdanKuštan現在請檢查!剛剛嘗試過 –

回答

0

如果沒有輸入您必須重置您的模式。你需要像這樣的東西:

void releaseKeySpecial(int key, int x, int y) 
{ 
    m.changeMode(Mario::STOP); // <- I used STOP because I don't know your default 
} 
+0

。仍然沒有改變:| –

+0

大聲笑我試着從你以前的代碼的想法,這是現在好,但它消失了一秒鐘就像一個小故障。其他工作很好,謝謝! –