我目前正在使用 GDI 用 C# 构建 2D 游戏引擎。我确实知道有更好的 GDI 替代品,但我也已经深入到这个项目中,现在无法回头。
因此,我目前有一个图形引擎,它可以根据我的相机位置和窗口大小来渲染位图的一部分,这给了我很大的性能提升。伟大的!
但是,我注意到,如果我将一堆游戏对象放置在同一位置,与将对象放置在不同位置相比,我会获得相同的帧速率。
那么,也许图形引擎正在渲染位图中不需要渲染的部分?如果是这种情况我该如何解决?
我相信代码并不是真正需要的,但只是为了确保这是我的图形引擎在主游戏循环期间正在执行的操作
namespace GameEngine.Graphics
{
public class GraphicsEngine
{
private Window window;
private View view;
private System.Drawing.Graphics frontBuffer;
private System.Drawing.Graphics backBuffer;
private System.Drawing.Bitmap backBufferBitmap;
public GraphicsEngine(Window window, View view)
{
this.window = window;
this.view = view;
frontBuffer = window.CreateGraphics();
backBufferBitmap = new Bitmap((int)view.Size.X, (int)view.Size.Y);
backBuffer = System.Drawing.Graphics.FromImage(backBufferBitmap);
frontBuffer.CompositingMode = CompositingMode.SourceCopy;
frontBuffer.CompositingQuality = CompositingQuality.AssumeLinear;
frontBuffer.SmoothingMode = SmoothingMode.None;
frontBuffer.InterpolationMode = InterpolationMode.NearestNeighbor;
frontBuffer.TextRenderingHint = TextRenderingHint.SystemDefault;
frontBuffer.PixelOffsetMode = PixelOffsetMode.HighSpeed;
backBuffer.CompositingMode = CompositingMode.SourceOver;
backBuffer.CompositingQuality = CompositingQuality.HighSpeed;
backBuffer.SmoothingMode = SmoothingMode.None;
backBuffer.InterpolationMode = InterpolationMode.Low;
backBuffer.TextRenderingHint = TextRenderingHint.SystemDefault;
backBuffer.PixelOffsetMode = PixelOffsetMode.Half;
}
public void Render()
{
frontBuffer.DrawImage(backBufferBitmap, new Rectangle(0, 0, window.Width, window.Height),
new Rectangle((int)view.Position.X, (int)view.Position.Y,
(int)view.Dimensions.X, (int)view.Dimensions.Y), GraphicsUnit.Pixel);
}
}
}