【发布时间】:2012-06-16 18:07:09
【问题描述】:
我目前正在开发一款游戏,我希望有一个带有背景图片的主菜单。
但是,我发现Graphics.DrawImage() 方法真的很慢。我做了一些测量。假设 MenuBackground 是我的资源图像,分辨率为 800 x 1200 像素。我会将它绘制到另一个 800 x 1200 位图上(我首先将所有内容渲染到缓冲区位图,然后缩放它,最后将其绘制到屏幕上 - 这就是我处理多个玩家分辨率的可能性的方式。但它不应该影响无论如何,请参阅下一段)。
所以我测量了以下代码:
Stopwatch SW = new Stopwatch();
SW.Start();
// First let's render background image into original-sized bitmap:
OriginalRenderGraphics.DrawImage(Properties.Resources.MenuBackground,
new Rectangle(0, 0, Globals.OriginalScreenWidth, Globals.OriginalScreenHeight));
SW.Stop();
System.Windows.Forms.MessageBox.Show(SW.ElapsedMilliseconds + " milliseconds");
结果出乎我的意料——Stopwatch 的测量值介于40 - 50 milliseconds 之间。而且因为背景图像不是唯一要绘制的,整个菜单的显示时间大约需要 100 多毫秒,这意味着可观察到的延迟。
我尝试将它绘制到 Paint 事件给出的 Graphics 对象,但结果是 30 - 40 milliseconds - 没有太大变化。
那么,这是否意味着Graphics.DrawImage() 不能用于绘制更大的图像?如果是这样,我应该怎么做才能提高我的游戏性能?
【问题讨论】:
-
如果“无法使用”是指“像糖蜜中的蜗牛一样慢”,那么可以。正如其他人所说,试试 XNA。坚持使用 2D sprite 渲染,直到您习惯了 XNA 框架,然后如果您愿意,则转向 3D。
-
我赞成这个比喻。 :)