Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[sfml] Po najechaniu myszką nie zmienia się grafika sprite

Ostatnio zmodyfikowano 2014-11-15 23:56
Autor Wiadomość
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?
C/C++
#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;
}
P-120542
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.
P-120556
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 );
P-120743
« 1 »
  Strona 1 z 1