【发布时间】:2013-08-30 22:20:03
【问题描述】:
我正在使用 SDLDotNet.dll 6.1.1(我认为是 SDL 1.2)。每当我连续快速闪到透明表面时(例如,当玩家快速点击时)它的 FPS 会下降约 5 fps(从 350 fps 下降到 5 fps)
这是我的表面:
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));
}
}
}
如果我将透明设置为 false,则在快速单击(并需要重新渲染)时不会丢失 FPS,但如果设置为 true,则会降低 FPS。导致 FPS 丢失的两个函数是 Fill & Blit
如果你想看到它的实际效果,我的 repo 是 @https://github.com/Snowl/PlataJumperSDL 相关文件是 Chunk.cs
【问题讨论】: