Как я могу нарисовать тайл карту без использования моего плунжера или процессора? - PullRequest
2 голосов
/ 09 апреля 2011

Хорошо, поэтому я пытаюсь нарисовать карту тайла на экране с SDL, и мой fps действительно плохая причина этого.И я попытался сделать это в SFML по-другому, но этот путь заставляет меня увеличивать использование оперативной памяти.

способ, которым я пытаюсь нарисовать его в 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);
                }
        }
    }
}

Таким образом, мой процессор поднимается и сбрасывает мой FPS.

Я пытался в SFML нарисовать уровень к изображению, а затем отобразитьэто изображение (с обрезкой), но это привело к тому, что мой баран поднялся до 50 000 тыс.

, поэтому я спрашиваю, как я могу нарисовать карту тайлов (в SDL), не повышая производительность моего ЦП или ОЗУ?

1 Ответ

4 голосов
/ 09 апреля 2011
  • Убедитесь, что при загрузке тайлакарты вы конвертируете его в тот же формат, что и на экране, чтобы блиттинг не выполнял никакого преобразования. SDL_DisplayFormat сделает это за вас.
  • Куда вы звоните render ()? Убедитесь, что он вызывается один раз за кадр, не больше, не меньше.
...