即使设置,C#变量也不会改变

时间:2016-06-06 15:52:10

标签: c# xna monogame

我在MonoGame C#中制作一个小游戏,我正在使用Visual Studio的内置设置管理器(Settings.settings),我在用户范围内有一个名为Volume的浮点值,其值设置为0.5。在我的代码中,我将值加载到XNA MediaPlayer类中,如下所示:

MediaPlayer.Volume = Settings.Default.Volume;
Console.WriteLine("Volume loaded at " + Settings.Default.Volume);

这应该将MediaPlayer.Volume从默认值1f设置为0.5f,而是将其更改为8?在尝试之前我没有触及任何音量设置所以我不知道8来自哪里。此外,每当我尝试为其分配其他内容时,它立即变回8。我让它工作的唯一方法是在主循环中不断将值设置为0.5(当然,这是一个糟糕的解决方案)。

正如我所说,我不知道造成这种情况的原因是什么,所以我不知道在我的问题中包含哪些代码。但是,我可以指出正确的方向:My GitHub

MediaPlayer.Volume首先在Main.cs:106中设置,我的(临时)卷更改代码位于Main.cs:127

这就是我所知道的。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我查看了您的repo

您在SettingsData中的变量应为protected,以便设置正确地继承它们。然后它应该默认为0.5f,如你所料。你拥有它的方式,设置不会继承,只是创建自己的Volume属性。

如评论中所述,config.xml中的某些内容将设置为8.我建议您将卷整体保存为0-100。

我怀疑你的配置文件8实际上是一个以错误格式存储的浮点数,即0,8。您的serializer不会写为invariable culture,所以当您阅读" float"从配置中返回0,8(而不是预期的0.8),然后您的引擎最终将其保存为8。

要么开始保存为不变文化,要么建议将其作为整体从0到100保存并在加载过程中将其保存。

_volume = 50;
MediaPlayer.Volume = _volume / 100f; // Volume is now correctly 0.5f.