2016-03-28 92 views
1

这是我为在屏幕上移动正方形而写的算法,Xcenter和Ycenter是正方形的中心。 speedX是水平速度,而verticalY是垂直速度。正方形的增加/减小速度

while (true) 
      { 
       int keyState = getKeyStates(); 

       // Update the ball's position 
       xCenter += speedX; 
       yCenter += speedY; 
       // Check if the ball hit the bound. 'Reflect' the ball if so. 
       if (xCenter > xMax) 
       { 
        xCenter = xMax; 
        speedX = -speedX; 
       } 
       else if (xCenter < xMin) 
       { 
        xCenter = xMin; 
        speedX = -speedX; 
       } 
       if (yCenter > yMax) 
       { 
        yCenter = yMax; 
        speedY = -speedY; 
       } 
       else if (yCenter < yMin) 
       { 
        yCenter = yMin; 
        speedY = -speedY; 
       } 

什么应该是提高速度的算法。 speedX ++只是在水平方向上增加,因此不能提供所需的结果。

在此先感谢。

+0

如果您希望方向保持不变,则需要按比例增加两个组件。 –

+0

我知道,但我无法弄清楚。如果我先写入x ++,然后再写入y ++,它们将按顺序执行,即x首先改变方向,然后是y。但是,它们必须一起发生 –

+0

您应该将方向概念与速度概念分开。实际上,如果'speedX'是,例如-2,'speedX ++'会减慢到-1。再做一次,广场就停止了(在水平方向,就是这样)。 –

回答

0

您可以很好地按顺序递增/递减这些X,Y位置。因为设置一个变量不会移动正方形。但是当你将新的位置应用到行动中时,Square将立即进入新的位置。

一个建议

当你发现广场是走出去的边界,它实际上需要从对面出现。意思是if (xCenter > xMax)集合xCenter = xMin,反之亦然