Monogame - 如何在 Monogame 中正确设置 FPS 上限?
Monogame - How to properly cap FPS in Monogame?
如果我的游戏是为 Windows Phone 构建的,我想有条件地将游戏的 FPS 限制在 30fps,因为我不需要它是 运行 60fps 并且我听太多人说最好把它限制在移动设备上,因为电池会耗尽。
我使用了 XNA 用于 Windows Phone 7:
的相同代码片段
//FrameRate is 30fps by default for WindowsPhone.
TargetElapsedTime = TimeSpan.FromTicks(333333);
但是......当它在限制 FPS 的工作时,它也会影响其他一切,导致卡顿和声音问题。因此,我想我做错了什么。
任何对我有帮助的东西都会很棒,因为我无法在互联网上找到任何关于这个问题的信息(大多数人想要的恰恰相反 :D )
要解决您的声音问题,请查看多线程和 运行 您的声音系统在一个单独的、无上限的线程上。对于游戏代码,特别是更新资产的代码,您的方法应该可行,但我个人的做法有所不同。
// in your game1 class variable definitions
private const float timeToNextUpdate = 1.0f / 30.0f;
private float timeSinceLastUpdate;
//in your game1 update method
public override void Update(GameTime gameTime)
{
timeSinceLastUpdate += (float)gameTime.ElapsedGameTime.TotalSeconds;
if (timeSinceLastUpdate >= timeToNextUpdate)
{
//update game
timeSinceLastUpdate = 0;
}
//systems you don't want to limit would be updated here
}
如果我的游戏是为 Windows Phone 构建的,我想有条件地将游戏的 FPS 限制在 30fps,因为我不需要它是 运行 60fps 并且我听太多人说最好把它限制在移动设备上,因为电池会耗尽。
我使用了 XNA 用于 Windows Phone 7:
的相同代码片段//FrameRate is 30fps by default for WindowsPhone.
TargetElapsedTime = TimeSpan.FromTicks(333333);
但是......当它在限制 FPS 的工作时,它也会影响其他一切,导致卡顿和声音问题。因此,我想我做错了什么。
任何对我有帮助的东西都会很棒,因为我无法在互联网上找到任何关于这个问题的信息(大多数人想要的恰恰相反 :D )
要解决您的声音问题,请查看多线程和 运行 您的声音系统在一个单独的、无上限的线程上。对于游戏代码,特别是更新资产的代码,您的方法应该可行,但我个人的做法有所不同。
// in your game1 class variable definitions
private const float timeToNextUpdate = 1.0f / 30.0f;
private float timeSinceLastUpdate;
//in your game1 update method
public override void Update(GameTime gameTime)
{
timeSinceLastUpdate += (float)gameTime.ElapsedGameTime.TotalSeconds;
if (timeSinceLastUpdate >= timeToNextUpdate)
{
//update game
timeSinceLastUpdate = 0;
}
//systems you don't want to limit would be updated here
}