对于2D游戏,C#形式太慢了吗?

Ada*_*dam 1 c# unity-game-engine winforms

我用Python + Pygame制作了这个游戏,但速度很慢,所以我用C#和它的形式进行了尝试.它甚至更慢!我在i5 radeon 6770m NTB上只获得了20fps,比我希望这个游戏运行的硬件快了数百万倍,我还没有完成游戏,它只是渲染一张地图.这是一个用缓慢的几MHz处理器运行的游戏的翻版.它的地图包含400x200瓷砖和相机显示仅79*79.我还安装了团结4.5; 是否值得学习它,它会给我带来显着的性能提升 - 如果有人知道它我将如何做一个由600*400瓷砖随机组成的地图,无论是深色瓷砖还是亮色; 它必须是"可碰撞的"?或者我在形式上做错了?

public void render()
    {

        Bitmap frame = new Bitmap(Game.CANVAS_WIDTH, Game.CANVAS_HEIGHT);
        Graphics frameGraphics = Graphics.FromImage(frame);

        TextureID[,] textures = Background.Blocks;

        while (true)
        {

            //frameGraphics.FillRectangle(new SolidBrush(Color.Aqua), 0, 0, Game.CANVAS_WIDTH, Game.CANVAS_HEIGHT);
            for (int x = 0; x < Game.AR_WIDTH; x++)
            {
                int xx = x * Game.TILE_SIDE - game.green_tank_pos[0] + Game.DIFF;
                if (xx < 0) continue;
                if (xx > Game.CANVAS_WIDTH) break;

                for (int y = 0; y < Game.AR_HEIGHT; y++)
                {
                    int yy = y * Game.TILE_SIDE - game.green_tank_pos[1] + Game.DIFF;
                    if (yy < 0) continue;
                    if (yy > Game.CANVAS_HEIGHT) continue;
                    switch(textures[x,y])
                    {
                        case TextureID.dark:
                            frameGraphics.DrawImage(tex_dark_gnd, xx, yy);
                            break;
                        case TextureID.bright:
                            frameGraphics.DrawImage(tex_bright_gnd, x * Game.TILE_SIDE - game.green_tank_pos[0] + Game.DIFF, y * Game.TILE_SIDE - game.green_tank_pos[1] + Game.DIFF);
                            break;
                    }
                }
            }

            frameGraphics.DrawImage(tex_green_tank, Game.DIFF, Game.DIFF);



            drawHandle.DrawImage(frame, 0, 0);
Run Code Online (Sandbox Code Playgroud)

Bra*_*NET 5

WinForms是一个糟糕的游戏平台,甚至是2D平台.它适用于业务线应用程序,包括很少甚至没有硬件加速.

此外,该技术很难编写游戏,更不用说高效的游戏了.你可能会使用WPF来完成一个非常简单的游戏,但你真的想学习XNA,MonoGame,Unity或其他一些可以利用DirectX的实际游戏平台(WPF也可以这样做,顺便说一下).

  • @ user3791837 XNA早已死了.MonoGame是它的开源实现.它几乎是一样的,但有支持. (2认同)