2014-09-04 98 views
0

我目前正在試圖讓3個球在窗體周圍彈跳,讓它工作,事情是我的代碼的這部分(使球從窗體的邊緣反彈)似乎很笨重,我覺得它可以以某種方式濃縮。在那裏,我可以清理從窗體邊緣彈跳C#

public void Move(int width, int height) 
     { 
      if ((position.X >= 0) && (position.X + size <= width)) //Within X Bounds 
      { 
       if (XBounce) 
       { 
        position.X -= speed; 
       } 
       else 
       { 
        position.X += speed; 
       } 
      } 
      else 
      { 
       if (!XBounce) 
       { 
        position.X -= size/2; 
       } 
       else 
       { 
        position.X += size/2; 
       } 
       XBounce = !XBounce; 
      } 

      if ((position.Y >= 0) && (position.Y + size <= height)) //Within Y Bounds 
      { 
       if (YBounce) 
       { 
        position.Y -= speed; 
       } 
       else 
       { 
        position.Y += speed; 
       } 
      } 
      else 
      { 
       if (!YBounce) 
       { 
        position.Y -= size/2; 
       } 
       else 
       { 
        position.Y += size/2; 
       } 
       YBounce = !YBounce; 
      } 

     } 
+0

像更合適的代碼審查疊加。 – user2864740 2014-09-04 03:10:56

+0

如果您將'XBounce'和'YBounce'更改爲'int'並使用了值'1'和'-1',您可以簡單地乘以反彈方向以獲得加/減值。翻轉標誌來改變方向很容易。 – HABO 2014-09-04 03:14:59

回答

1

通過改變XbounceYBounceint變量設置爲1-1可以簡化事情有點辦法:

public void Move(int width, int height) 
    { 
     if ((position.X >= 0) && (position.X + size <= width)) //Within X Bounds 
     { 
      position.X -= XBounce * speed; 
     } 
     else 
     { 
      XBounce = -XBounce; 
      position.X -= XBounce * size/2; 
     } 

     if ((position.Y >= 0) && (position.Y + size <= height)) //Within Y Bounds 
     { 
       position.Y -= YBounce * speed; 
     } 
     else 
     { 
      YBounce = -YBounce; 
      position.Y -= YBounce * size/2; 
     } 
    } 
+0

我喜歡這樣的想法,儘管球只是坐在那裏,不會移動 – Kiwilad 2014-09-04 03:55:41

+0

根據球的開始位置,您是否已將彈跳值初始化爲「1」或「-1」? – HABO 2014-09-04 12:00:29