【问题标题】:draw multiple rectangles without fps drop with framegraphics使用 framegraphics 绘制多个没有 fps 下降的矩形
【发布时间】:2014-05-13 17:07:48
【问题描述】:

我试图在我的面板上绘制一些矩形,然后让它们掉下来,但是由于我的程序需要重新绘制背景,并且每次循环时每个矩形都在我添加很多矩形时下降了很多。

这是我绘制所有矩形的代码:

frameGraphics.FillRectangles(Red, rectlist.ToArray());

还有其他方法可以加快速度吗?因为 rectlist.toarray() 包含大约 400-500 个矩形。


我正在使用winforms:

        Graphics g = Canvas.CreateGraphics(); where canvas is my panel.
        Bitmap frame = new Bitmap(Game.CANVAS_WIDTH, Game.CANVAS_HEIGHT);
        Graphics frameGraphics = Graphics.FromImage(frame);

这就是我构建图形的方式。

【问题讨论】:

  • 我想你可以指出你使用的是什么平台,Winform、wpf、web还是纯控制台?
  • Gdi+ 是制作游戏的糟糕选择。这主要是关于概念:场景、精灵、灯光、输入、声音等。我还没有制作任何游戏,但如果必须,我会选择xna-like。 ToArray 与此相比只需要很少的东西,即使是绘制单个矩形也需要什么。您无法提高 fps,除非您将开始使用算法优化(例如 3d 缓冲区),这些优化已经在游戏框架中实现。

标签: c# winforms


【解决方案1】:

Winform 正在使用 Gdi+,它在实际绘图过程中会锁定很多。所以它限制了绘图速度。我认为您有多种选择。

  1. 使用 XNA + Winform。您可以查看这篇文章以获取详细信息。这几乎没有增强。 http://www.dreamincode.net/forums/topic/338422-xna-and-winforms/ https://gamedev.stackexchange.com/questions/54998/winform-xna-microsoft-example-issues-with-drawing-texture2d

  2. 尝试其他工具包,如 SlimX 或 Direct3D,它们会比 Gdi+ 更快。

  3. 强烈推荐你使用Wpf,你可以创建形状并动态改变它们的位置,这样你就不需要关心渲染部分了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多