SDL - 3. lekce
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama

SDL - 3. lekceSDL - 3. lekce

 
Hledat
Moderní platforma pro vytvoření vašeho nového webu – Wix.com.
Nyní už můžete mít web zdarma.
Vytvořte si vlastní webové stránky. Snadno, rychle a levně přes Saywebpage.com
Vybavení pro Laser Game
Spuštěn Filmový magazín
Laser Game Brno
Laser Game Ostrava

SDL - 3. lekce

Google       zatím neprovedena       30. 10. 2005       14 787×

V této lekci se naučíme vykreslit do našeho okna bitmapový obrázek (BMP) na určitou pozici...

Reklama
Reklama

Tato lekce je rozšířením předchozí 2. lekce, avšak teď nebudeme potřebovat funkce DrawPixel(), Lock(), ani Unlock(). Takže pokud vyloženě nechcete vykreslovat pixely i zde, můžete tyto funkce klidně smazat. Dále vymažte obsah funkce DrawScene(), protože zde nyní budeme vykreslovat naše bitmapy. A také smažte jediný parametr této funkce, jak v její definici, tak při jejím volání ve funkci main().

Začneme tím, že si vytvoříme další vrstvu SDL_Surface, do které posléze načteme obrázek. Nazveme si ji třeba image. Potřebujeme, aby byla globální - přístupná pro všechny funkce, a proto ji umístěte hned pod include soubory. Tam přesuňte i vrstvu screen, kterou jsme v předchozích lekcích měli pouze ve hlavní funkci main().

SDL_Surface *screen;
SDL_Surface *image;

Obrázek, který budeme chtít zobrazit, si pojmenujte image.bmp a umístěte jej do stejné složky jako výsledný exe program naší aplikace. Pro načítání obrázků do vrstev si vytvoříme funkci LoadImages(), i když je obrázek zatím jen jeden. V této funkci obrázky načteme funkcí SDL_LoadBMP(), jejíž jediný parametr určuje cestu k obrázku, takto:

void LoadImages(){
  image = SDL_LoadBMP("image.bmp");
}

Tuto funkci můžeme umístit hned pod definice našich vrstev. Pod ní si dále napíšeme funkci DrawIMG() pro vykreslení onoho obrázku z určité vrstvy na vrstvu našeho okna. Má tři parametry: první je vrstva, ze které se bude vykreslovat, druhý je pozice X, kde chceme obrázek vykreslit a třetí je pozice Y.

V této funkci si nejdříve vytvoříme strukturu rect typu SDL_Rect, která ponese některé údaje o obrázku. Zatím nám jde jenom o pozice X a Y, a proto je předáme proměnným rect.x a rect.y z proměnných x a y (druhý a třetí parametr funkce DrawIMG()). Poté vyvoláme funkci SDL_BlitSurface() pro konečné vykreslení obrázku. První parametr je vrstva, ze které se obrázek vykresluje. Ten se zjistí při volání funkce DrawIMG() z prvního parametru (proměnná img). Druhý parametr v této lekci nevyužijeme, a proto mu předáme hodnotu NULL. Třetí parametr je vrstva, na kterou se vykresluje, což je v našem případě permanentně vrstva screen. A čtvrtému parametru předáme adresu struktury rect s údaji o pozici. Zdrojový kód funkce DrawIMG() vypadá takto:

void DrawIMG(SDL_Surface *img, int x, int y){
  SDL_Rect rect;
  rect.x = x;
  rect.y = y;
  SDL_BlitSurface(img, NULL, screen, &rect);
}

Nyní už jen stačí přepsat funkci DrawScene(). Tentokrát to bude jednoduché - vyvoláme funkci DrawIMG() s vrstvou image a libovolnou pozicí. Já zde mám 0 a 0, takže se obrázek vykreslí v levém horním rohu okna. A funkci SDL_Flip(screen) známe už z minula, ta nám průběžně aktualizuje vrstvu screen (okno).

void DrawScene(){
  DrawIMG(image, 0, 0);
  SDL_Flip(screen);
}

Nakonec ještě nesmíme zapomenout ve funkci main() vyvolat naši funkci na načtení obrázků LoadImages() kdekoliv před hlavní smyčkou.

Pokud je vše v pořádku, měl by se vám na určené pozici v okně vykreslit váš obrázek. Výsledný zdrojový kód by měl vypadat asi takto:

#include <SDL/SDL.h>
#include <stdio.h>
#include <stdlib.h>

SDL_Surface *screen;
SDL_Surface *image;

void LoadImages(){
  image = SDL_LoadBMP("image.bmp");
}

void DrawIMG(SDL_Surface *img, int x, int y){
  SDL_Rect rect;
  rect.x = x;
  rect.y = y;
  SDL_BlitSurface(img, NULL, screen, &rect);
}

void DrawScene(){
  DrawIMG(image, 0, 0);
  SDL_Flip(screen);
}

int main(int argc, char *argv[]){

  if(SDL_Init(SDL_INIT_VIDEO) < 0){
    printf("Inicializace SDL se nezdařila: %s
", SDL_GetError());
    exit(1);
  }

  atexit(SDL_Quit);
  screen = SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE|SDL_DOUBLEBUF);

  if (screen == NULL){
    printf("Vytvoření okna se nezdařilo: %s
", SDL_GetError());
    exit(1);
  }
  
  LoadImages();
  
  bool done=false;

  while(done == false){
    SDL_Event event;
    while(SDL_PollEvent(&event)){
      if(event.type == SDL_QUIT) done=true;
    }
    
    DrawScene();
  }

}

×Odeslání článku na tvůj Kindle

Zadej svůj Kindle e-mail a my ti pošleme článek na tvůj Kindle.
Musíš mít povolený příjem obsahu do svého Kindle z naší e-mailové adresy kindle@programujte.com.

E-mailová adresa (např. novak@kindle.com):

TIP: Pokud chceš dostávat naše články každé ráno do svého Kindle, koukni do sekce Články do Kindle.

3 názory  —  3 nové  
Hlasování bylo ukončeno    
0 hlasů
Google
Autor programuje v C++, resp. využívá knihovnu SDL. Sportuje, má rád hudbu a zvířata.

Nové články

Obrázek ke článku V přechodu na DVB-T2 tápou především senioři. Přeladit jim pomáhají vnoučata, zapojí se i stát

V přechodu na DVB-T2 tápou především senioři. Přeladit jim pomáhají vnoučata, zapojí se i stát

Už na konci měsíce může zůstat část Čechů bez televizního signálu. Vypínání stávající sítě začne již 27. listopadu v Praze a středních Čechách a do poloviny roku 2020 čeká přechod na nový standard pozemního digitálního televizního vysílání DVB-T2 celou republiku. K naladění nového televizního vysílání musí řada lidí nakoupit modernější zařízení, upravit antény nebo přejít na kabelové či internetové vysílání. 

Reklama
Reklama
Obrázek ke článku Zavádění Master Data Management v praxi

Zavádění Master Data Management v praxi

Předchozím článku jsme si vysvětlili, co jsou to Master Data, kdy je firma obvykle začíná řešit, v jakých krocích postupovat a jak nám může pomoci zvláštní nástroj pro evidenci Master dat. V tomto článku se podíváme na dvou příkladech, jak prakticky začít Master data řešit.

1. Nová Master Data, která potřebujeme někde spravovat
2. Zmapování existujících Master dat a určení jejich vlastníků

Obrázek ke článku 5 nesprávných důvodů, proč dělat vlastní mobilní aplikaci

5 nesprávných důvodů, proč dělat vlastní mobilní aplikaci

Myslíte si, že máte skvělý nápad na byznys apku a znáte všechno, co potřebujete? Možná vám vývoj software na míru rozmluví Vláďa Skoumal, z firmy studio SKOUMAL vyvijející mobilní aplikace 5.11. 2019 v 18:00 v Impact Hub Praha nebo tento jeho článek.


 

Obrázek ke článku Ericsson ConsumerLab Report: rozšířená realita je další úrovní gamingu

Ericsson ConsumerLab Report: rozšířená realita je další úrovní gamingu

Celkem 66 % uživatelů zajímá rozšířená realita v oblasti gamingu. Mezi nimi je i 35 % těch, kteří jinak hry nehrají.
Pro téměř 50 % respondentů by bylo zajímavé zapojení virtuální objektů do reálného světa. Objekty by zůstaly tam, kde je při hře „umístili“.
Až 43 % uživatelů láká využití rozšířené reality ve sportu

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032019 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý