.[ ČeskéHry.cz ].
SFML vytvoreni nove textury za behu

 
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: 27. březen 2015, 13:13:49    Předmět: SFML vytvoreni nove textury za behu Odpovědět s citátem

Zdravím mam projekt ve stylu tycoon a potřeboval bych nějakou radu tak vytvořit funci která uchova data vytvořené textury Respektive mam vybrany objekt který chci pridat kliknu někam na matu a textura se vykresli to vše mam ale problém nastává když kliknu znovu jinam tak stara textura se smaze a nahraje se nova. Zde ukázka kódu. Předem děkuji za rady
kód:
//Item.h
class Item
{
public:
   Item();
   ~Item();

   void draw(sf::RenderWindow &window, float &x, float &y);

private:

   sf::Sprite Table1_Sprite;
   sf::Texture Table1_Texture;

};
//Item.cpp
Item::Item()
{
   if (!Table1_Texture.loadFromFile("Table1.png"))
   {
   }

   Table1_Sprite.setTexture(Table1_Texture);
}


Item::~Item()
{
}

void Item::draw(sf::RenderWindow &window, float &x, float &y)
{
   float sets = 10;
   Table1_Sprite.setPosition(x, y);
   Table1_Sprite.setOrigin(sets, sets);
   Table1_Sprite.scale(sf::Vector2f(0.1f, 0.1f));
   window.draw(Table1_Sprite);
   
}




// Main.cpp

Item *Polozka;

int main()
{
   float posx;
   float posy;

   sf::RenderWindow window(sf::VideoMode(800, 600), "!");
   while (window.isOpen())
   {
      sf::Event event;

      while (window.pollEvent(event))
      {
   switch (event.type)
   {
      case sf::Event::Closed:
           window.close();
      break;


   case sf::Mouse::Right:
   {
     posx = (float)event.mouseButton.x;
     posy = (float)event.mouseButton.y;
     break;
                        
   }
  }
   window.clear();
   window.setView(view1);

   Polozka = new Item();
   Polozka->draw(window,posx,posy);
   delete Polozka;   
   window.display();
 }
}   
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Lemik



Založen: 30. 07. 2007
Příspěvky: 138

PříspěvekZaslal: 27. březen 2015, 18:21:00    Předmět: Odpovědět s citátem

Proč tady vlastně pokaždé tvoříš nový Item, který v kontruktoru pokaždé načte (předpokládám pro různé Itemy různou) texturu a aplikuje jí na sprite. Nevím jestli jsi to jen narychlo "ostříhal" pro minimální kód, ale pokud není důvod proč Item mazat - tedy pokud ho v příštím průchodu budeš chtít kreslit znovu - nech si ho uložený v nějakém kontejneru třeba. Načítat pokaždé texturu není moc efektivní. BTW pokud jednu texturu používáš ve více Itemech, není špatné mít např. nějaký texture manager, který by tyhle požadavky na textury vyřizoval tak, že poprvé texturu načte a poté už jen předá (třeba shared) pointer na tu už načtenou.

kód:
   Polozka = new Item();
   Polozka->draw(window,posx,posy);
   delete Polozka;   
   window.display();
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