.[ ČeskéHry.cz ].
SFML - Dynamická alokace paměti

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Kenvelo



Založen: 27. 03. 2015
Příspěvky: 6

PříspěvekZaslal: 8. říjen 2015, 11:30:00    Předmět: SFML - Dynamická alokace paměti Odpovědět s citátem

Zdravím, zasekl sem se u alokace paměti pro texturu. Mám funkci která vykresluje pole 10x10 o velikosti čtverce 50x50

a potřeboval bych pro třídní funkci alokovat paměť jelikož neznám přesný počet vykreslených textur. Funkce se dá přirovnat ke grafickému editoru. Když kliknu do pozice x : 7 a y 6 tak zde by se měla vykreslit má zvolená textura

kód:
class brush
{
public:
   .....
   void draw(sf::RenderWindow &window);

private:
   sf::Texture t_Grass1;
   sf::Sprite s_Grass1;
};

void brush::draw(sf::RenderWindow &window)
{
   s_Grass1.setTexture(t_Grass1);
   
}


Vše ostatní mám jen nevím jak alokovat paměť pro s_Grass1.

Předem díky za radu.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
tlevi



Založen: 08. 10. 2015
Příspěvky: 2

PříspěvekZaslal: 8. říjen 2015, 17:46:19    Předmět: Odpovědět s citátem

Textúry by som určite neukladal do triedy brush. Trieda by mala robiť iba 1 vec (a robiť ju dobre).

Namiesto toho by som si vytvoril triedu "TextureManager", ktorej naivná implementácia by spočívala v načítavaní textúr do hash mapy (resp. unordered) (v prípade, že ešte neboli načítané), napr.:
kód:

class TextureManager
{
public:
  //...
  static sf::Texture& getTexture(std::string & filename);
private:
  static std::unordered_map<std::string, sf::Texture &> textureMap;
}

Pričom getTexture() by zistila, či sa už textúra z daného súboru načítala. Ak áno, vrátila by ju. Ak nie, načítala by ju, pridala do textureMap a vrátila ju.

K tvojej otázke ohľadom s_Grass1 - viacero spritov môže používať tie isté dáta textúry z pamäti. Takže stačí si tie sprity hádzať do std::vectoru napríklad (podobne ako sa textúry v TextureManager-i hádžu do std::unordered_map) a potom cez ne iterovať a renderovať.

A ešte jedna vec - nepriradzuj textúru spritu v každom vykresľovanom frame (aka draw()). Stačí ju priradiť raz, porom to už len vykresľuješ pomocou window.draw(sprite).

SFML 2.3 - Graphics Sprite
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++ Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna