【发布时间】:2012-02-11 22:47:57
【问题描述】:
using System;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.Graphics;
namespace proj
{
public class game : Microsoft.Xna.Framework.Game
{
GraphicsDeviceManager graphics;
public static SpriteBatch sprite_batch;
public static Texture2D texture;
public game()
{
graphics = new GraphicsDeviceManager(this);
}
protected override void Initialize()
{
graphics.PreferredBackBufferWidth = 300;
graphics.PreferredBackBufferHeight = 300;
graphics.ApplyChanges();
Content.RootDirectory = "Content";
sprite_batch = new SpriteBatch(GraphicsDevice);
texture = Content.Load<Texture2D>("a"); // 1 x 1, white
base.Initialize();
}
protected override void Update(GameTime game_time)
{
base.Update(game_time);
}
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.Black);
sprite_batch.Begin();
if (gameTime.IsRunningSlowly)
{
sprite_batch.Draw(texture,
new Rectangle(50, 50, 200, 200), Color.OrangeRed);
}
sprite_batch.End();
base.Draw(gameTime);
}
}
}
对我来说,橙色方块几乎一直可见,但几乎什么都没有发生。
60 不更新和 60 不绘制任何内容,使得应该发生 120 个几乎是空的函数调用,并且他们有一整秒钟的时间来执行此操作以使程序不会“运行缓慢”,但 gameTime.IsRunningSlowly 几乎返回 True一直都在。
我确信我的计算机足够快,可以更好地处理这个问题,这是怎么回事?我需要能够使用 gameTime.IsRunningSlowly,如果它不能正常工作,我就不能。
【问题讨论】:
-
这不是标准的基本游戏模板,你还有其他东西要包装代码吗?我打开了一个全新的游戏项目并复制了您在 Initialize 和 Draw 中的实际代码片段,但我没有得到相同的体验。事实上,如果我在绘制橙色方块的线上设置一个断点,它不会因为让我开心 5 分钟而受到打击。
-
我现在没有任何问题,也没有更改任何代码。这既令人沮丧又非常好。
-
也许您的病毒防护运行较早并占用了您的系统资源?这样的事情可能会导致您的系统开始运行缓慢,从而导致游戏运行缓慢。
-
也许吧。我的系统设置为不会自动发生这样的事情,而是提示我,这样我就可以接受当我不做任何其他事情时,不要使用虚拟内存,因为它有大量的真实内存等......我不认为这是系统的其余部分。也许关于我如何初始化事物的某些事情会产生间歇性故障。不过,我看不出我初始化事物的方式有什么问题。
标签: c# performance xna rendering