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で)タイルマップを描くことができますか?
画面をハードウェアサーフェスに設定しましたか?ソフトウェアの表面は、時には本当に遅くなる可能性があります。 – sl0815
ハードウェアの表面が他の時には遅くなることがあります。 – Kylotan