3

私は最近、SFMLライブラリを使用してC++でタイルベースのゲームに取り組み始めました。私はC++とSFMLのどちらにもあまり経験がないので、パフォーマンスの問題は私のコードに関係していると確信しています。

基本的な考え方は、この方法で動的に作成するタイルの2D配列があるということです。

Tile tiles**;

tiles = new Tile*[sizeX];

for(int i = 0; i < sizeX; i++)
   tiles[i] = new Tile[sizeY];

そして、私はすべてをこのように描きます:

for(int x = 0; x < sizeX; x++)
{
   for(int y = 0; y < sizeY; y++)
   {
       tiles[x][y].Draw(app);
   }
}

変数appはsf::RenderWindowであり、参照として関数に渡されます。

10x10のマップを描画すると、遅いfpsで実行されます。

私の悪い英語でごめんなさい!

前もって感謝します!

4

1 に答える 1

4

パフォーマンスの問題は、おそらく2D配列の反復とは関係ありません。おそらくTile::Drawパフォーマンスが原因なので、最適化してみてください。

しかしとにかく、@ chrisが言ったように、2D配列の代わりに1Dベクトルを使用すると、少し速くなる可能性があります。しかし、それによってパフォーマンスが大幅に変わることはありません。

タイルマップをレンダリングする正しい方法は、XNAで通常行うようにすべてのタイルをレンダリングするのではなく、大きなテクスチャを作成してからタイルをこのテクスチャにレンダリングし、次にこの大きなテクスチャを画面にレンダリングすることです。

これは、SFMLがOpenGLを使用する方法が、多数のDraw()呼び出しに対応していないためです。

于 2012-06-01T13:00:16.933 に答える