Looping Background

Untuk membuat background, kalian bisa menggunakan tiling ataupun background yang berulang. Contoh background yang menggunakan tiling atau pemetaan dengan menggunakan array adalah beberapa game nintendo seperti Lode Runner, Tank, Milknuts, flappy, dll. Beberapa game lain yang menyediakan fitur untuk membuat peta atau stage juga banyak yang menggunakan tiling. Saya tidak akan membahas lagi cara menggunakan tiling. Kalau kalian memang programmer yang cukup cerdas, kalian seharusnya akan mengetahui cara menggunakan array untuk membuat peta latar belakang.

Selain tiling, kita juga bisa menggunakan background berulang yang menyesuaikan ukurannya dengan panjang window atau layar. Kalian bisa menggunakan satu gambar pendek yang ditampilkan berulang dengan loop untuk membuat background yang memenuhi layar. Gambar untuk background tersebut sebaiknya dibuat setinggi layar supaya tidak perlu perbesaran. Contoh kode program untuk menampilkan background menggunakan loop bisa kalian lihat di bawah ini.
#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>
#define playar 640
#define tlayar 480

SDL_Renderer *trender=NULL;

SDL_Texture *muat_gambar(SDL_Rect *dgambar, const char *s){
SDL_Texture *teksture=NULL;
    SDL_Surface *tmp=IMG_Load(s);
    if(tmp){
        dgambar->w=tmp->w;
        dgambar->h=tmp->h;

        SDL_SetColorKey(tmp, SDL_TRUE, SDL_MapRGB(tmp->format, 0x00, 0xFF, 0xFF));
        teksture=SDL_CreateTextureFromSurface(trender, tmp);
        if(teksture)printf("gagal membuat teksture %s", s);
        else SDL_FreeSurface(tmp);
    }else printf("gagal memuat");
    return teksture;
}

int main(int argc, char* args[]){
    SDL_Window* window = NULL;
    SDL_Event evt;
    int pos=0;

    if( SDL_Init( SDL_INIT_VIDEO ) < 0 && IMG_Init(IMG_INIT_JPG|IMG_INIT_PNG)){
        printf( "Error: %s\n", SDL_GetError() );
    }else{
        window = SDL_CreateWindow( "SDLku", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, playar, tlayar, SDL_WINDOW_SHOWN );
        if( window == NULL ){
            printf( "Error : %s", SDL_GetError() );
        }else{
            trender = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
            SDL_Texture *latar=NULL;
            SDL_Rect dgambar;
            unsigned int berikutnya, platar, tlatar;
  
            latar=muat_gambar(&dgambar, "background.png");
            platar=dgambar.w;
            tlatar=dgambar.h;
  
            berikutnya=SDL_GetTicks()+70;
            if(latar!=NULL){
                SDL_Rect rct;
      
                while(evt.type!=SDL_QUIT){
                    while(SDL_PollEvent(&evt)){
                    }

                    SDL_SetRenderDrawColor(trender, 0xFF, 0xFF, 0xFF, 0xFF);
                    SDL_RenderClear(trender);

                    rct.x=0;
                    rct.y=0;
                    rct.w=platar;
                    rct.h=tlayar;
                    SDL_RenderSetViewport(trender, &rct);
      
                    while(rct.x < playar){
                        SDL_RenderSetViewport(trender, &rct);
                        SDL_RenderCopy(trender, latar, NULL, NULL);
                        rct.x+=platar;
                    }
      
                    SDL_RenderPresent(trender);
                }
            }
        }
    }

    SDL_DestroyWindow( window );
    SDL_Quit();

    return 0;
}
Kalian perlu menggunakan gambar yang bisa terlihat saling menyambung antara ujung-ujungnya agar sambungan background terlihat lebih alami. Selain itu, pastikan nama dan penempatan file kalian sesuai dengan isi parameter function dalam kode programnya.
Coba kalian gunakan gambar seperti di atas, dan lihat seperti apa hasil dari program kalian!

Walaupun gambarnya tidak panjang, tapi karena adanya loop maka gambar bisa memenuhi permukaan window.