我正在运行的程序和版本:
问题:当我在下面的循环中更新我的游戏时,我打开任务管理器,看到该程序占用了25个CPU!这太过分了。
循环:
protected override void Update(GameTime gameTime)
{
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape))
Exit();
// TODO: Add your update logic here
if (angleCounter != 359)
angleCounter++;
else
angleCounter = 0;
base.Update(gameTime);
}
循环使角度(度)增加,以便图像(png)i绘图不断旋转
绘图部分:
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
spriteBatch.Begin();
// TODO: Add your drawing code here
Vector2 location = new Vector2(200, 200);
Rectangle sourceRectangle = new Rectangle(0, 0, sprite.Width, sprite.Height);
Vector2 origin = new Vector2(sprite.Width / 2, sprite.Height / 2);
float angle = (float)DegreeToRadianal(angleCounter);
spriteBatch.Draw(sprite, location, sourceRectangle, Color.White, angle, origin, 1f, SpriteEffects.None, 1);
spriteBatch.End();
base.Draw(gameTime);
}
编辑:我已经运行了一个分析器,这就是它所说的:
另外:我的电脑本身不是问题,它是一台非常高端的PC应该可以用01 CPU运行这样的程序
答案 0 :(得分:6)
设计性能的一个普遍因素是,您需要一个以“足够快”为目标的以业务为中心的定义。如果您的游戏使用25%的CPU,您的用户是否在意?不会。您的用户关心您的游戏是否顺利运行。你的游戏运行顺畅吗?
“动画看起来很好,很好,很流畅”
看起来你的程序运行得足够快!
Don't waste time fixing things that aren't broken
这意味着您的程序基本上会对您的计算机说“尽可能快地运行此循环!”
鉴于此,您如何得出结论:您的计算机“应该能够以1%的CPU利用率运行这样的程序”?
似乎不言自明的是,速率无限的循环将导致100%的CPU利用率而不考虑时钟速度(在像您这样的4核机器上= 25%)!
如果出于某种原因,对你来说非常重要的是游戏运行速度不是很快,你可以尝试设置: -
IsFixedTimeStep = true;
在您的游戏构造函数中,但请确保您清楚地了解固定时间步骤与可变时间步骤的含义: -
答案 1 :(得分:0)
好的,基于你们对谷歌的大力帮助和研究,我发现了以下内容:
Monogame希望程序尽可能快地运行,而不是“保存”计算机的CPU。因此它“预留”了1个核心(当你真正需要非常高的时候会有更多核心)。
正常程序和游戏之间的区别是巨大的,正常程序意图最小化CPU,因此对计算机的影响,游戏意图通过使计算机更加努力地使游戏本身运行更顺畅
最后:我应该明确我的意图,例如:我没有在这个特定的问题中说明我想在保持平稳游戏(60fps)的同时制作低影响力的CPU游戏< / p>
谢谢大家通过这么快的回答帮助我得出这些结论!