• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

SFML ustawianie tekstury

Object Storage Arubacloud
0 głosów
741 wizyt
pytanie zadane 5 stycznia 2019 w C i C++ przez NewUser1 Nowicjusz (210 p.)

#include "headers.h"



sf::RectangleShape setSquareGround(int x, int y) {
    
    sf::Texture texture;
    texture.create(x, y);
    if(!texture.loadFromFile("Ground.png")) {
        std::cout<<"File not found";
    }
    else
        std::cout<<1;
    
    
    sf::RectangleShape rectangle(sf::Vector2f(x, y));
    
    rectangle.setTexture(&texture); 
    
    
    return rectangle;
    
}

Tekstura z pliku zostaje wczytana, prostokąt nadal jest biały. Dlaczego tak się dzieje? :(

2 odpowiedzi

+1 głos
odpowiedź 5 stycznia 2019 przez RafalS VIP (122,820 p.)
wybrane 5 stycznia 2019 przez NewUser1
 
Najlepsza
Prawdopodobnie dlatego, że texture to zmienna lokalna w funkcji, która przestaje istnieć po wyjscu z tej funkcji. Zwrócony rectangle ma zatem wskaźnik do obiektu który przestał istnieć.
komentarz 5 stycznia 2019 przez NewUser1 Nowicjusz (210 p.)
Czyli muszę tekstury inicjalizowac globalnie, czy to brzydko?
komentarz 5 stycznia 2019 przez RafalS VIP (122,820 p.)
Nie koniecznie globalnie, ale tak żeby zmienna żyła dopóki jest potrzebna.

Pewnie najlepiej dynamiczna alokacja, ale nie wiem jakie są praktyki dla tekstur w sfml.
0 głosów
odpowiedź 5 stycznia 2019 przez NewUser1 Nowicjusz (210 p.)
//Ground.h klasa

#include "headers.h"


class Ground {
public:
 const std::string GROUND_TEXTURE_PATH = "Ground.png";
 void setWidth(int inWidth); //ustaw wysokość
 void setHeight(int inHeight); //ustaw szerokosc
 void printGround(int inWidth, int inHeight, std::string inTexture);
 sf::RectangleShape rectangle;
 
private:
    //tekstura
     sf::Texture texture;
    //shape
     
     
     int width = 600;
     int height = 800;
     
     void loadTexture(std::string path); //pobierz i ustaw teksture
   
     void setSquareGround();   //stworz ksztalt i ustaw teksture
     
     
     
};

 

 

 

 

 


#include "headers.h"
#include "Ground.h"



void Ground::loadTexture(std::string path) {
    sf::Texture texture;
    texture.create(this->width, this->height);
    if(!texture.loadFromFile(path)) {
        std::cout<<"file not found";
    }
    else
        std::cout<<1;
    
    
}
void Ground::setWidth(int inWidth){
    
    this->width=inWidth;
    
}
void Ground::setHeight(int inHeight){
    
    this->height=inHeight;
    
}

void Ground::setSquareGround() {
    
    
     
    this->rectangle.setSize(sf::Vector2f(this->height, this->width));
    this->rectangle.setTexture(&this->texture);
    //this->rectangle.setTextureRect(sf::IntRect(10, 10, 100, 100));
    
       
    
}

void Ground::printGround(int inWidth, int inHeight, std::string inTexture) {
    
    loadTexture(inTexture);
    setWidth(inWidth);
    setHeight(inHeight);
    setSquareGround();
    
}

 

main:

        Ground floor;
        
        floor.printGround(600, 800, "Ground.png");
        window.draw(floor.rectangle);
   
            
        
        window.display();

 

Nadal shape wyświetla się bez tekstury. Co robię nie tak :/

komentarz 5 stycznia 2019 przez NewUser1 Nowicjusz (210 p.)
Znalazłem błąd w metodzie loadTexture

Podobne pytania

0 głosów
1 odpowiedź 352 wizyt
pytanie zadane 28 lipca 2021 w C i C++ przez tonn204 Mądrala (7,440 p.)
0 głosów
1 odpowiedź 134 wizyt
pytanie zadane 20 marca 2020 w C i C++ przez Kondz10 Początkujący (270 p.)
0 głosów
1 odpowiedź 206 wizyt

92,551 zapytań

141,393 odpowiedzi

319,523 komentarzy

61,936 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...