c# - 使用鼠标滚轮 XNA 缩放图像

标签 c# .net xna xna-4.0

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

原始代码:

        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;
        }

最佳答案

如果您阅读: MSDN MouseState Scroll Wheel Value

您会发现它从游戏一开始就保持运行值。因此,您要做的就是检查它与之前的值相比是否有变化,并采取相应的措施。

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

在更新循环之外声明这些:

float prevWheelValue;
float currWheelValue;

然后在您的更新中:

prevWheelValue = currWheelValue;
currWheelValue = ms.ScrollWheelValue;

现在您可以简单地检查 if prevWheelValue > < 或 == 到 currWheelValue 并将值限制在您想要的边界。

Mathhelper.Clamp

关于c# - 使用鼠标滚轮 XNA 缩放图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13166244/

相关文章:

c# - 急切地处理 ManualResetEvent

c# - Silverlight/C# 图像未找到异常处理

C# XNA : stopping and playing Cue (sound) objects

c# - 将 WinForms 与 XNA 一起使用?

c# - xna 使物体绕 ITS 轴移动(不绕点 0,0,0)

C#-线程和父子传递

.net - 获取 Windows 主题?

C# .net -> SQLite 错误 : Unable to open the database file

c# - 如何向现有 Winforms 控件添加属性

c# - 为 ASP.NET 编写月份和年份下拉列表的最佳方法是什么?