0

SDLDotNet.dll 6.1.1 (SDL 1.2 だと思います) を使用しています。透明な表面に素早く連続してブリットすると (たとえば、プレーヤーがすばやくクリックした場合)、1 回のクリックで約 5 fps (350 fps から 5 fps に低下) に 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));
                    }
                }
            }

Transparent を false に設定すると、高速クリックしても FPS の損失はありませんが (再レンダリングが必要です)、true の場合は FPS が低下します。FPS の損失を引き起こす 2 つの機能は、Fill & Blit です。

実際の動作を見たい場合は、私のリポジトリは @ https://github.com/Snowl/PlataJumperSDL関連ファイルは Chunk.cs です。

4

1 に答える 1

0

残念なことに、レンダリング ポイント リストをクリアしていなかったため、再レンダリングする必要がないときに多くのポイントがレンダリングされ、レンダリングが必要なポイントの量が増加しました。

ReRenderPoints = new List<Point>();

私のレンダリング機能の最後にそれを修正しました。

とにかくありがとう。

于 2013-08-28T23:34:58.863 に答える