Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 系统。绘图速度是否足以进行2D游戏编程?_C#_Graphics_.net 4.0_Gdi+_System.drawing - Fatal编程技术网

C# 系统。绘图速度是否足以进行2D游戏编程?

C# 系统。绘图速度是否足以进行2D游戏编程?,c#,graphics,.net-4.0,gdi+,system.drawing,C#,Graphics,.net 4.0,Gdi+,System.drawing,假设我正在使用System.Drawing for graphics用C语言制作一个基于2D瓷砖的游戏 面向对象的GDI层 System.Drawing命名空间提供对GDI+基本图形功能的访问MSDN 当我开始用C语言编写图形和游戏编程时,很多书(比如一本书)都告诉我,像GDI这样的软件渲染API对于以合适的FPS运行的双缓冲2D游戏来说效率不够。那么,Microsoft.NET的System.Drawing实现是否属于同一类别?它是在后台使用GDI&GDI+,还是可以使用不同的、更快的后端 我

假设我正在使用System.Drawing for graphics用C语言制作一个基于2D瓷砖的游戏

面向对象的GDI层

System.Drawing命名空间提供对GDI+基本图形功能的访问MSDN

当我开始用C语言编写图形和游戏编程时,很多书(比如一本书)都告诉我,像GDI这样的软件渲染API对于以合适的FPS运行的双缓冲2D游戏来说效率不够。那么,Microsoft.NET的System.Drawing实现是否属于同一类别?它是在后台使用GDI&GDI+,还是可以使用不同的、更快的后端

我能期望多少FPS


即使System.Drawing只能使用GDI,是否不可能让游戏以合适的帧速率运行,比如说50-60帧/秒,使用GDI?

这并不是速度足够快的问题,因为它适合您想要执行的任务。老实说,使用XNA等工具来实现绘制所需的基本功能非常容易,而且您可以免费获得这么多。根本没有理由进入这个系统。为制作游戏而绘画

你链接的那本书非常古老,虽然它包含了一些永不过时的算法,但大部分都已经过时了


至于你可以从System.Drawing中获得多少FPS,你可能可以从一个简单的基于平铺的游戏中获得足够的FPS。如果你这样做的话,它会起作用,但它会阻碍你以后取得真正的进步——特别是现在使用XNA制作游戏的门槛太低了。

这并不是速度够快的问题,而是它适合你想要执行的任务。老实说,使用XNA等工具来实现绘制所需的基本功能非常容易,而且您可以免费获得这么多。根本没有理由进入这个系统。为制作游戏而绘画

你链接的那本书非常古老,虽然它包含了一些永不过时的算法,但大部分都已经过时了


至于你可以从System.Drawing中获得多少FPS,你可能可以从一个简单的基于平铺的游戏中获得足够的FPS。如果你这样做的话,它会起作用,但它会阻碍你以后取得真正的进步——特别是在使用XNA制作游戏的门槛现在很低的情况下。

你会得到什么样的FPS是不可能的,这完全取决于你的场景有多复杂。GDI/+渲染中最大的限制是位图存储在主内存中,而不是视频适配器内存中。因此,您绘制的大部分内容都必须从RAM复制到视频适配器的帧缓冲区。当然,这是相对缓慢但不可避免的,只要您不采用可以管理视频适配器上内存的API。没有什么理由可以避免这种API,没有任何硬件不支持DirectX

页面翻转的等价物很容易获得,只需将表单或控件的DoubleBuffered属性设置为true即可。您绘制的任何内容都会首先进入后缓冲区,在绘制事件完成后,该缓冲区会被闪电式地发送到视频适配器。唯一无法得到的是与适配器的垂直刷新间隔同步,因此撕裂是不可避免的。这一点的明显程度在很大程度上取决于您在场景中移动对象的速度

唯一的其他细节是您绘制的任何位图的像素格式。精灵,纹理,诸如此类的东西。您选择的格式非常重要。在当前的硬件上,Format32bppPArgb比其他任何一种都快十倍。如果对位图进行任何重缩放,则Graphics.InterpolationMode属性对于速度非常重要。好的很贵。只要确保只有一个线程同时访问位图,就可以在工作线程中重新缩放位图


但一定要看看DirectX SlimDX和XNA。为方便起见很难击败,只是要做的工作要少得多。

你会得到什么样的FPS是很不可能的,这完全取决于你的场景有多复杂。GDI/+渲染中最大的限制是位图存储在主内存中,而不是视频适配器内存中。因此,您绘制的大部分内容都必须从RAM复制到视频适配器的帧缓冲区。当然,这是相对缓慢但不可避免的,只要您不采用可以管理视频适配器上内存的API。没有什么理由可以避免这种API,没有任何硬件不支持DirectX

页面翻转的等价物很容易获得,只需将表单或控件的DoubleBuffered属性设置为true即可。您绘制的任何内容都会首先进入后缓冲区,在绘制事件完成后,该缓冲区会被闪电式地发送到视频适配器。你唯一得不到的就是与适配器的垂直刷新间隔同步,所以撕裂是不可避免的 E这一点的明显程度在很大程度上取决于您在场景中移动对象的速度

唯一的其他细节是您绘制的任何位图的像素格式。精灵,纹理,诸如此类的东西。您选择的格式非常重要。在当前的硬件上,Format32bppPArgb比其他任何一种都快十倍。如果对位图进行任何重缩放,则Graphics.InterpolationMode属性对于速度非常重要。好的很贵。只要确保只有一个线程同时访问位图,就可以在工作线程中重新缩放位图

但一定要看看DirectX SlimDX和XNA。为方便起见,很难击败SlimDX,只是要做的工作要少得多。

SlimDX是一个非常好的推荐,作为托管Direct2D/Direct3D包装以及许多其他功能,如果您的目标是Windows,我推荐它胜过XNA或MDX。如果你认为你会去其他平台,你可能想投资OpenGL。NET的OpenTK绑定也非常完整。SlimDX作为托管Direct2D/Direct3D包装器以及许多其他功能,是一个非常好的建议,如果您的目标是Windows,我建议您使用它而不是XNA或MDX。如果你认为你会去其他平台,你可能想投资OpenGL。NET的OpenTK绑定也相当完整。