在 C# 中绘图(屏幕外)



我想用C#编程一个小游戏。目前只涉及正方形,但我稍后会详细介绍。

所以后台有很多事情发生,比如碰撞检测、子弹移动、玩家移动、用"摄像头"聚焦在玩家身上(以及未来的敌人 AI(。为了执行所有这些任务,我有一个间隔为 10 毫秒的计时器。随着每次滴答,物理"发生",屏幕将被重新绘制。

现在来解决问题:屏幕闪烁,...没那么糟糕,但我认为当我添加更多东西时情况会更糟。我尝试在屏幕外绘制图像,然后将其作为整个图像绘制到屏幕上。但是我需要创建几个位图和图形对象,大约 30 秒后,程序将使用大约 2GB 的 RAM。

public void Draw()
    {
        Bitmap bmpMap = new Bitmap(Map.Width, Map.Height);
        Graphics gphMap = Graphics.FromImage(bmpMap);
        Bitmap bmpWeapon = new Bitmap(WeaponSector.Width, WeaponSector.Height);
        Graphics gphWeapon = Graphics.FromImage(bmpWeapon);
        DrawMap(gphMap);
        DrawWeaponSector(gphWeapon);
        Map.CreateGraphics().DrawImage(bmpMap, 0, 0);
        gphMap.Dispose();
        WeaponSector.CreateGraphics().DrawImage(bmpWeapon, 0, 0);
        gphWeapon.Dispose();
    }

注意:我不直接在窗体上绘制,而是在面板中绘制。它们被称为地图(这是正在进行的行动(和武器部门(在这里你可以看到你当前的武器和弹药(。

创建两个位图对象及其图形对象一次并存储它们。调用传递图形对象的 Draw 方法。这样,您将避免等待 GC 以最小 30 fps 的速率对位图对象进行垃圾回收。

请确保对表单使用双缓冲:

this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);

http://msdn.microsoft.com/en-us/library/system.windows.forms.controlstyles.aspx

最新更新