2012-10-31 21 views
2

如果鼠标滚轮相应地向上或向下滚动,我想要增加图像的大小或减小图像的大小。如果图像达到设定的最大尺寸,则不会使蚂蚁变大,反之亦然,如果图像变小。我遇到的问题是一旦您达到图像的最大尺寸并继续向上滚动,然后向下滚动图像不会立即变小,直到您向下滚动相同次数时滚动图像时最大尺寸,再次反转使图像变小。 ScrollWheelValue是只读属性,因此无法重置。我试图添加一些逻辑,如果滚轮向上滚动并且图像的最大尺寸减去120,因为120是鼠标每次滚动增加的值。任何人都可以帮我解决这个问题吗?非常感谢使用鼠标滚轮制作图像比例XNA

原始代码:

 float scale = ms.ScrollWheelValue/120; 

     scaleFactor = scale * scaleChange; 

     if (scaleFactor > MAX_SCALE) 
     { 
      scaleFactor = MAX_SCALE; 


     } 

     else if (scaleFactor < MIN_SCALE) 
     { 
      scaleFactor = MIN_SCALE; 


     }    

新代码:

 if (scaleFactor > MAX_SCALE) 
     { 
      scaleFactor = MAX_SCALE; 
      float newScale = ms.ScrollWheelValue/120; 
      if (newScale > scale) 
      { 
       scaleCount = scaleCount - 120; 
      } 
      if (newScale < scale) 
      { 
       scaleCount = scaleCount + 120; 
      } 

     } 

     else if (scaleFactor < MIN_SCALE) 
     { 
      scaleFactor = MIN_SCALE; 
      float newScale = ms.ScrollWheelValue/120; 
      if (newScale > scale) 
      { 
       scaleCount = scaleCount - 120; 
      } 
      if (newScale < scale) 
      { 
       scaleCount = scaleCount + 120; 
      } 

     } 

     else 
     { 
      scale = ms.ScrollWheelValue/120 + scaleCount; 

      scaleFactor = scale * scaleChange; 
     } 

回答

4

如果你读: MSDN MouseState Scroll Wheel Value

你会看到,它不断从一开始就运行值的游戏。所以你想要做的就是检查它是否与之前的值有所不同,然后做相应的处理。

你是如何设置它似乎你不关心实际价值,只是自上次他们滚动轮子以来的差异。

声明这些您的更新循环之外:

float prevWheelValue; 
float currWheelValue; 

然后在您的更新:

prevWheelValue = currWheelValue; 
currWheelValue = ms.ScrollWheelValue; 

现在你的支票可以仅仅是如果prevWheelValue> <或==来currWheelValue和夹紧值到你想要的边界。

Mathhelper.Clamp