2012-10-01 120 views
-1

這可能是一個沒有教養的問題 - 或者是一種奇怪的問題。減法操作的順序?

我的問題是,爲什麼這個代碼不工作:

  if (up == true) 
     { 
      SDL_Delay(pause_t); 
      player.setY(player.velocity - player.getY()); 
     } 
     if (left == true) 
     { 
      SDL_Delay(pause_t); 
      player.setX(player.velocity - player.getX()); 
     } 

然而,這個代碼的工作:

  if (up == true) 
     { 
      SDL_Delay(pause_t); 
      player.setY(player.getY() - player.velocity); 
     } 
     if (left == true) 
     { 
      SDL_Delay(pause_t); 
      player.setX(player.getX() - player.velocity); 
     } 

兩個代碼之間的區別是,在第一個例子,我在調用位置函數之前,首先要減去一個部分(對象的速度)。 當我運行這段代碼時,會發生什麼事,它不會在軸上移動1,而是10. Y軸的大小大於10,所以我實際上並沒有減去它自己的座標。

但是,在第二段代碼中,在調用我的位置函數之後,我在最後減去速度。 第二段代碼會發生什麼,對象會移動一個像素(速度的整數值)。

對於那些想知道我在做什麼的人,這些是我的openGL遊戲的控件。這是爲了移動一個物體。

而爲了記錄,這不是一個重要的問題。我的代碼確實有效。我只是好奇它爲什麼如此運作。

+1

我不知道我明白。你問你爲什麼'a - b'和'b - a'有不同的結果? – Tim

+0

是的,就是這樣。我意識到在正常的算術中,這將是明顯的原因。 但是,處理器調用函數之前,它試圖做算術,是否正確?這就是爲什麼我問我的問題。 – user1707244

回答

1

在第一個例子中,我在調用位置函數之前先減去一個部分(對象的速度)。

不,在第一個版本中,您將減去舊位置,而不是減去速度。

代碼爲你的描述是:

player.setY((-player.velocity) + player.getY()); 

,這將正常工作。

+0

是不是完成了減法 - >這樣,作爲反對你似乎建議的相反方式?你總是從第二個數字中減去第一個數字。 – user1707244

+0

@ user1707244你知道4-2是2,對嗎?不是-2? – harold

+0

我可能已經去了錯誤的學校 - 或者這可能是我們如何在歐羅巴做的。或者我可能完全不在。當我在小學時,我們被教導說4 - 2是-2 ...正如上面評論中所解釋的那樣,它是這樣的 - >。如在4中從2中減去 - 反之亦然。 – user1707244