我正在使用SDLDotNet.dll 6.1.1(我认为是SDL 1.2)。每当我连续快速地快速滑入透明表面时(例如当玩家快速点击时),它会以每秒5 fps左右的速度下降到FPS(从350fps下降到5fps)
这是我的表面:
ChunkSurface = new Surface(256, 256) {Transparent = true};
和我更新块的代码
if (ReRerenderPartial)
{
foreach (Point poin in ReRenderPoints)
{
int ChunkX = poin.X;
int ChunkY = poin.Y;
int Block = Blocks[ChunkX, ChunkY];
var b = BaseBlock.blockList.Find(Block);
if (b.Surface().Transparent)
{
ChunkSurface.Fill(new Rectangle(new Point(poin.X * 16, poin.Y * 16), new Size(16, 16)), Color.Black);
}
if (Block > 0)
{
ChunkSurface.Blit(b.Surface(), new Point(poin.X*16, poin.Y*16));
}
}
}
如果我将Transparent设置为false,则单击fast(并且需要重新渲染)时没有FPS丢失但如果它为true则会丢失FPS。导致FPS损失的两个功能是Fill&位块传送
如果你想看到它的实际效果,我的回购是@ https://github.com/Snowl/PlataJumperSDL相关文件是Chunk.cs
答案 0 :(得分:0)
我的不好,我没有清除渲染点列表,导致很多点在不需要重新渲染时渲染,随着需要渲染的点数而增加。
ReRenderPoints = new List<Point>();
在我的渲染功能结束时修复了它。
非常感谢。