2015-01-08 36 views
-2

我試圖讓我的對象以45deg對角移動。當它擊中屏幕寬度時,它應該反彈,即時通訊在某個地方犯了一個大錯誤,但無法弄清楚。sdl 45度運動

distance = 0; 
etiSpeed = 1; 

t2 = SDL_GetTicks(); 
delta = (t2 - t1) * 0.001; 
t1 = t2; 

distance += etiSpeed * delta; 



    ball_x = ball_x * distance * ball_x_vel; 
    ball_y = ball_y * distance * ball_y_vel; 

    if (ball_x < SCREEN_WIDTH) 
    { 
     ball_x_vel = 1; 
     DrawSurface(screen, ball, ball_x, ball_y); 
    } 

else if (ball_x = SCREEN_WIDTH) 
    { 
     ball_x_vel = -1; 
     DrawSurface(screen, ball, ball_x, ball_y);  
    } 

回答

2

你的不正確的測試

​​

在設置ball_x位置SCREEN_WIDTH其作爲布爾測試爲真,因此下一個代碼塊將被執行。我認爲你是想測試

if (ball_x == SCREEN_WIDTH) 

但是,這是不正確也是如此,它應該是

if (ball_x >= SCREEN_WIDTH) 

甚至認爲還是太簡單,你需要重新定位球如果是關閉屏幕。

if (ball_x >= SCREEN_WIDTH) 
    ball_x = (SCREEN_WIDTH - 1) - (ball_x -(SCREEN_WIDTH-1)); 

所以假設有

#define SCREEN_WIDTH 40 
... 
ball_x = 40; 
if (ball_x >= SCREEN_WIDTH) 
    ball_x = (SCREEN_WIDTH - 1) - (ball_x -(SCREEN_WIDTH-1)); 

此計算結果爲39 - 1。

(40-39)= 38,其通過1衝出了球,籃板