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

[C++, SFML] Lustrzane odbicie pozycji myszy y w stosunku do środka sprite'a

Ostatnio zmodyfikowano 2015-01-01 01:04
Autor Wiadomość
Winner_Of_Death
Temat założony przez niniejszego użytkownika
[C++, SFML] Lustrzane odbicie pozycji myszy y w stosunku do środka sprite'a
» 2014-12-31 16:02:45
Witam.
Próbuję napisać swego rodzaju painta, aczkolwiek napotkałem problem, mianowicie linia rysowana na texturze (która potem jest wyświetlana na spricie), odbija się w lustrzanym stosunku do środka sprite'a. Żeby to lepiej zobrazować, napisałem krótki kod (przecież nikomu nie chciałoby się czytać mojego pełnego, parosetnego kodu ;), oraz dołączam obrazek:
C/C++
#include <SFML/graphics.hpp>
#include <vector>

int main()
{
    sf::RenderTexture rkartka;
    sf::Sprite kartka;
    sf::RenderWindow okno;
    std::vector < sf::Vertex > linie;
   
    okno.create( sf::VideoMode( 800, 600, 32 ), "?" );
   
    bool mozna_malowac = false;
    rkartka.create( 400, 400 );
    kartka.setPosition( 50, 50 );
    rkartka.clear( sf::Color::White );
   
    do
    {
       
       
        sf::Event zdarzenie;
        while( okno.pollEvent( zdarzenie ) )
        {
            if( zdarzenie.type == sf::Event::KeyPressed && zdarzenie.key.code == sf::Keyboard::Escape
            || zdarzenie.type == sf::Event::Closed )
                 okno.close();
           
            if( zdarzenie.type == sf::Event::MouseMoved && mozna_malowac == true )
                 linie.push_back( sf::Vertex( sf::Vector2f( sf::Mouse::getPosition( okno ).x - kartka.getPosition().x, sf::Mouse::getPosition( okno ).y - kartka.getPosition().y ), sf::Color::Black ) ); //X prawidlowe, Y w lustrzanym odbiciu.
           
            if( zdarzenie.type == sf::Event::MouseButtonPressed &&( zdarzenie.key.code == sf::Mouse::Left ) )
                 mozna_malowac = true;
           
            if( zdarzenie.type == sf::Event::MouseButtonReleased )
            {
                mozna_malowac = false;
                linie.clear();
            }
        }
       
        rkartka.draw( & linie[ 0 ], linie.size(), sf::LinesStrip );
        kartka.setTexture( rkartka.getTexture() );
        okno.clear( sf::Color::Black );
        okno.draw( kartka );
        okno.display();
       
    } while( okno.isOpen() );
   
}

http://holey.cba.pl​/Przechwytywanie.PNG

Czyżby trzeba było obracać coś o 180 stopni? A może ręcznie liczyć pozycję y przy rysowaniu? Proszę o pomoc.
P-123741
1aam2am1
» 2014-12-31 17:13:37
kartka.setTexture( rkartka.getTexture() );
przed tym wstaw
rkartka.display();
P-123757
Winner_Of_Death
Temat założony przez niniejszego użytkownika
» 2015-01-01 01:04:00
Dziękuję bardzo za trafną odpowiedź!

Chciałbym również życzyć wszystkim szczęśliwego Nowego Roku! ;)
P-123775
« 1 »
  Strona 1 z 1