[sfml] Po najechaniu myszką nie zmienia się grafika sprite
Ostatnio zmodyfikowano 2014-11-15 23:56
Acarin1995 Temat założony przez niniejszego użytkownika |
[sfml] Po najechaniu myszką nie zmienia się grafika sprite » 2014-11-13 20:16:22 Witam mam problem z spite po najechaniu na niego myszką nie zmienia się jego grafika. Może kto wie dlaczego? #include <SFML/Graphics.hpp> #include "Mapa.hpp" int main() { int pozycja_x1, pozycja_x2, pozycja_y1, pozycja_y2; pozycja_x1 = 16; pozycja_x2 = 80; pozycja_y1 = 16; pozycja_y2 = 32; sf::RenderWindow App( sf::VideoMode( 800, 600, 32 ), "Okienko" ); sf::Texture przycisk01; przycisk01.loadFromFile( "przycisk.png" ); sf::Sprite przycisk; przycisk.setTexture( przycisk01 ); sf::Texture przyciska01; przyciska01.loadFromFile( "przyciska.png" ); sf::Sprite przyciska; przyciska.setTexture( przyciska01 ); while( App.isOpen() ) { sf::Event zdarzenie; int mouseX = sf::Mouse::getPosition().x; int mouseY = sf::Mouse::getPosition().y; while( App.pollEvent( zdarzenie ) ) { if( zdarzenie.type == sf::Event::Closed ) App.close(); } App.clear( sf::Color::White ); przycisk.setPosition( 16, 16 ); przyciska.setPosition( 16, 16 ); if( pozycja_x1 <= mouseX && pozycja_x2 >= mouseX && pozycja_y1 <= mouseY && pozycja_y2 >= mouseY ) { App.draw( przyciska ); } else { App.draw( przycisk ); } App.display(); } return EXIT_SUCCESS; }
|
|
CodeMeister |
» 2014-11-13 22:47:43 po co tak komplikować sprawę skoro jest sprajt.getGlobalBounds().contains(sf::Vector2i) do sprawdzenia czy jakiś obiekt (prostokątny) zawiera dany punkt, w tym wypadku pozycję myszki - nie trzeba samemu wpisywać na 'sztywno' pozycji narożników? Zwraca true/false
po drugie nie rób dwóch sprajtów. Wystarczy mieć jeden i tylko podmieniać w nim tekstury, a nawet można to zrobić na jednej teksturze. |
|
NopeDotAvi |
» 2014-11-15 23:56:49 1. masz vectory w sfml więc ich użyj zamiast pisac int pozycja_x1, pozycja_x2, pozycja_y1, pozycja_y2;
pisz sf::Vector2f pos1(16.f, 16.f); sf::Vector2f pos2(80.f, 32.f);
a potem się odwołujesz w sposób pos1.x; pos1.y; pos2.x; pos2.y Nazywaj zmienne w jakiś bardziej sensowny sposób bo łatwo się pogubić Jeden sprite wystarczy w tym przypadku tylko zmienić teksturę. sf::Sprite sprite; //twoj sprite sf::Textures texture; if(!texture.loadFromFile(sciezka)) wypisz_blad(); sprite.setTexture(twojaTextura);
Twój program raczej nie działa ze względu na to: int mouseX = sf::Mouse::getPosition().x; int mouseY = sf::Mouse::getPosition().y;
bierzesz pozycje myszki względem ekranu a nie aplikacji, zmien to na: sf::Vector2f mouse(sf::Mouse::getPosition(App)); //App to nazwa twojego okna
Nie ustawiaj pozycji spritów cały czas w pętli głównej, straszne marnotractwo, chodzi mi o to: przycisk.setPosition( 16, 16 ); przyciska.setPosition( 16, 16 );
|
|
« 1 » |