Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
Kenvelo
Založen: 27. 03. 2015 Příspěvky: 6
|
Zaslal: 27. březen 2015, 13:13:49 Předmět: SFML vytvoreni nove textury za behu |
|
|
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 |
|
|
Lemik
Založen: 30. 07. 2007 Příspěvky: 138
|
Zaslal: 27. březen 2015, 18:21:00 Předmět: |
|
|
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 |
|
|
|
|
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