2013-06-11 62 views
0

我想要一個項目符號移動,當我點擊空間。首先,當空間被按下時,子彈圖像被點亮,同時定時器啓動,當它達到5000毫秒時,圖像的x值應該改變。這是我的代碼:子彈運動SDL/C++

SDL_Rect bulletRect; 
bulletRect.x = dstX+31; //dstX/Y is the source destination of another image where the bullet should be drawn 
bulletRect.y = dstY+10.5; 
SDL_Surface *bullet = IMG_Load(bullet.png"); 


if (drawBullet) //bool set to true in the space key event. 
    {    
     SDL_BlitSurface(bullet, NULL, screen, &bulletRect); 

     //timer 
     my_timer.start(); //starts the timer 

     if (SDL_GetTicks() == 5000) //if 5 sec 
     { 
      bulletRect.x += 10; 
     } 
    } 

圖像只圖混合,但5秒鐘後沒有任何反應。哪裏不對?

+0

以外我確實建議查看['Model | View | Controller'](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80 %93控制器)分離的擔憂。無論如何, –

回答

0

你應該有SDL_GetTicks() >= 5000,而不是檢查==5000,否則只有在碰巧碰巧碰到5000純運氣的情況下才會輸入條件。

from SDL's documentation,SDL_GetTicks函數:返回自SDL庫初始化以來的毫秒數。如果程序運行時間超過49.7天,則此值將環繞。

因此,如果您檢查自上次移動以來已經過了5秒(不知道您還可以在此嘗試做什麼)蜱和使用,爲下一個循環過程中比較反對的電流數(檢查以前和當前的區別是> 5000)

+0

無法正常工作。

+0

你有if(drawBullet),當用戶按下空格鍵時調用,然後你有一個計時器和一個檢查點數的檢查。如果你在空格鍵事件之後只能進入這種狀態,你的計時器在做什麼? SDL_getTicks會不會重置,還是繼續遞增?在這種情況下,您的if語句只會在程序的前5秒內執行任何操作。 – ash

+0

是的,現在我打算開發它更多 –

0

你的條件語句

if (SDL_GetTicks() == 5000) //if 5 sec 
{ 
    bulletRect.x += 10; 
} 

是語句

if (drawBullet) //bool set to true in the space key event 

這意味着只有在空格鍵被按下時纔會檢查一次定時器。將此移到if(drawBullet)