2011-04-09 2 views
2

さて、SDLで画面にタイルマップを描画しようとしていますが、私のfpsは本当に悪い原因です。そして私はSFMLでそれを別の方法でやろうとしましたが、その方法でラムの使い方が変わります。RAMの使用やCPUの使用がなくてもタイルマップを描画するにはどうすればよいですか?

私はSDLでそれを描くしようとしている方法は、私が切り刻むSDL_Surface *tilemap;を持っており、このようにレンダリングされます。

void apply_surface (int sourceX, int sourceY, int sourceW, int sourceH, int x, int y, SDL_Surface* source, SDL_Surface* destination){ 

    // make a temporary rectangle to hold the offsets 
    SDL_Rect offset; 
    SDL_Rect sourceRect; 

    // give the offsets to the rectangle 
    offset.x = x; 
    offset.y = y; 
    sourceRect.x = sourceX; 
    sourceRect.y = sourceY; 
    sourceRect.h = sourceH; 
    sourceRect.w = sourceW; 

    // blit the surface 
    SDL_BlitSurface(source, &sourceRect, destination, &offset); 
} 


void render(){ 
    for(int x = 0; x < lv.width; x++){ 
     for(int y = 0; y < lv.height; y++){ 
      if(x * lv.tileSize < 640 && y * lv.tileSize < 480){ 
       int tileXCoord = 0; 
       int tileYCoord = 0; 
       int tileSheetWidth = tilemap->w/lv.tileSize; 

       if (lv.tile[x][y] != 0) 
       { 
        tileXCoord = lv.tile[x][y] % tileSheetWidth; 
        tileYCoord = lv.tile[x][y]/tileSheetWidth; 
       } 

       apply_surface(tileXCoord * lv.tileSize, tileYCoord * lv.tileSize, lv.tileSize, lv.tileSize, x * lv.tileSize, y * lv.tileSize, tilemap, screen); 
       } 
     } 
    } 
} 

この方法では、アップ私のCPUの道をもたらし、そして私のFPSを削除します。

SFMLで画像にレベルを描画しようとしましたが、その画像を(切り抜きで)表示するのではなく、私のRAMを50,000kまで上げました。

私は何を求めているのですか?どのように私のCPUやRAMを上げることなく(SDLで)タイルマップを描くことができますか?

+1

画面をハードウェアサーフェスに設定しましたか?ソフトウェアの表面は、時には本当に遅くなる可能性があります。 – sl0815

+2

ハードウェアの表面が他の時には遅くなることがあります。 – Kylotan

答えて

4
  • タイルマップを読み込むときに、画面と同じ形式に変換することを確認します。これにより、ブリッティングが変換を実行する必要がなくなります。 SDL_DisplayFormatはこれを行います。
  • ここでrender()を呼び出していますか?それがフレームごとに1回呼び出されていることを確認してください。
関連する問題