C# 游戏引擎精灵表性能问题-DrawImage性能问题

C# 游戏引擎精灵表性能问题-DrawImage性能问题,c#,graphics,game-engine,C#,Graphics,Game Engine,我正在尝试制作一个游戏引擎,带有一个精灵纸加载系统。最初它是基于单个图像,但我遇到了巨大的内存问题,最终导致我使用了一个精灵表系统 在更改之前,引擎每秒渲染300多帧,渲染时间约为2ms。现在渲染时间为16-20ms,fps约为40。我曾尝试通过减少运行的计算量来优化代码,但几乎没有任何改进 我可以做些什么来优化这个,我的问题的根源似乎是使用srcRectangle来选择要显示的精灵表的区域,使用DrawImage方法 绘制方法: public virtual void Draw(Graphic

我正在尝试制作一个游戏引擎,带有一个精灵纸加载系统。最初它是基于单个图像,但我遇到了巨大的内存问题,最终导致我使用了一个精灵表系统

在更改之前,引擎每秒渲染300多帧,渲染时间约为2ms。现在渲染时间为16-20ms,fps约为40。我曾尝试通过减少运行的计算量来优化代码,但几乎没有任何改进

我可以做些什么来优化这个,我的问题的根源似乎是使用srcRectangle来选择要显示的精灵表的区域,使用DrawImage方法

绘制方法:

public virtual void Draw(Graphics g)
{
   g.DrawImage(this.SpriteController.SpriteSheet,this.GetBoundingBox(), this.SpriteController.GetSpriteRectangle(),GraphicsUnit.Pixel);
}
GetBoundingBox方法:

public Rectangle GetBoundingBox()
{
   return new Rectangle((int)this.X, (int)this.Y, this.SpriteController.Width, this.SpriteController.Height);
}
GetSpriteCtangle方法:

public RectangleF GetSpriteRectangle()
{
   return new RectangleF(this.SpriteX, this.SpriteY, this.Width, this.Height);
}

这就是渲染上运行的所有内容。

1。你为什么不使用XNA?还是单一游戏?2.此.SpriteController.SpriteSheet的作用是什么?您确定没有在每帧重新加载整个图像吗?1。我写我自己的来学习。请放心,如果我要出售一款游戏,我会使用一个预先制作的游戏引擎。2.它是精灵表3的位图。对ranXna不是一个游戏引擎,而是一个可以用来制作游戏的microsoft库。它只提供与游戏相关的抽象(例如纹理)和一个现成的游戏循环。而且,大多数情况下,您使用的是为GUI应用程序制作的库,这些库可能不太适合做游戏。Xna转而包装directX库,它是多媒体和游戏库。