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

[SFML] Kliknięcie myszy.

Ostatnio zmodyfikowano 2012-04-15 16:30
Autor Wiadomość
Eruzione
Temat założony przez niniejszego użytkownika
[SFML] Kliknięcie myszy.
» 2012-04-15 01:04:32
Witam!

Chciałbym się dowiedzieć jak zmienić "na stałe" kolor sprajta po kliknięciu na niego przyciskiem myszy ( np.: lewym ).
Mam taki kod, ale w tym przypadku sprajt zmienia kolor dopóki trzymam wciśnięty przycisk.
Z kursu wiem jak zmienić kolor "na stałe" za pomocą kliknięcia przycisku na klawiaturze, próbowałem podobnie zrobić z przyciskiem myszy ale nie działa.

C/C++
#include <SFML/Graphics.hpp>

int main()
{
    sf::RenderWindow oknoAplikacji( sf::VideoMode( 800, 600, 32 ), "Kurs SFML - http://cpp0x.pl" );
   
    //Utworzenie białego obrazka i wykonanie przekształceń na sprajcie
    sf::Image obrazek;
    obrazek.Create( 30, 60, sf::Color::White );
    sf::Sprite naszSprajt;
    naszSprajt.SetImage( obrazek );
    naszSprajt.SetPosition( 400, 300 );
    naszSprajt.SetScale( 4, 2 );
    naszSprajt.SetCenter( obrazek.GetWidth() / 2.0f, obrazek.GetHeight() / 2.0f );
    naszSprajt.SetColor( sf::Color( 0x00, 0xff, 0x00, 0x80 ) );
   
    while( oknoAplikacji.IsOpened() )
    {
        sf::Event zdarzenie;
        while( oknoAplikacji.GetEvent( zdarzenie ) )
        {
            if( zdarzenie.Type == sf::Event::Closed )
                 oknoAplikacji.Close();
           
        } //while
       
        oknoAplikacji.Clear( sf::Color::Black );
       
        naszSprajt.SetColor( sf::Color::Red );
        const sf::Input & wejscie = oknoAplikacji.GetInput();
        bool bCzyZaznaczony =( wejscie.IsMouseButtonDown( sf::Mouse::Left ) );
        if( bCzyZaznaczony )
        {
            naszSprajt.SetColor( sf::Color::Green );
        }
        if( zdarzenie.Type == sf::Event::MouseButtonPressed ) { //je¿eli wciœniêto przycisk
            naszSprajt.SetPosition( zdarzenie.MouseButton.X, zdarzenie.MouseButton.Y );
        }
       
        oknoAplikacji.Draw( naszSprajt );
        oknoAplikacji.Display();
    } //while
    return 0;
}
P-54538
malan
» 2012-04-15 01:47:10
C/C++
if( !bCzyZaznaczony && wejscie.IsMouseButtonDown( sf::Mouse::Left ) )
{
    naszSprajt.SetColor( sf::Color::Green );
    bCzyZaznaczony = true;
}
Nie zapomnij zadeklarować
bCzyZaznaczony
 przed główną pętlą.
P-54540
Eruzione
Temat założony przez niniejszego użytkownika
» 2012-04-15 10:26:35
malan, wstawiłem twoją pętle do programu i zadeklarowałem bCzyZaznaczony, przed pętlą główną, ale niestety nic to nie dało.
W if-ie sprawdzam czy jednocześnie wcisnąłem i nie wcisnąłem przycisku myszy, a to raczej niemożliwe. W każdym razie po zaproponowanych przez Ciebie zmianach, kolor nie zmienia się, nawet na czas wciśnięcia przycisku.
P-54541
hincu
» 2012-04-15 14:55:42
bCzyZaznaczony = true;

zamien na
bCzyZaznaczony = !bCzyZaznaczony;

a pozniej
if( bCzyZaznaczony == true )
zmien kolor sprite
else jakis tam standardowy kolor
P-54552
Eruzione
Temat założony przez niniejszego użytkownika
» 2012-04-15 15:56:07
Cały czas nie działa. Być może ja źle modyfikuje kod korzystając Waszych wskazówek, sam już nie wiem. Jeśli ktoś będzie miał jeszcze jakieś pomysły o będę bardzo wdzięczny.
P-54553
Eruzione
Temat założony przez niniejszego użytkownika
» 2012-04-15 16:30:33
Po wielu próbach udało się. Załączam kod, może się komuś przyda.

C/C++
#include <SFML/Graphics.hpp>

int main()
{
    sf::RenderWindow oknoAplikacji( sf::VideoMode( 800, 600, 32 ), "Kurs SFML - http://cpp0x.pl" );
    oknoAplikacji.SetFramerateLimit( 60 );
   
    sf::Image obrazek;
    obrazek.Create( 30, 60, sf::Color::White );
    sf::Sprite naszSprajt;
    naszSprajt.SetImage( obrazek );
    naszSprajt.SetPosition( 400, 300 );
    naszSprajt.SetScale( 4, 2 );
    naszSprajt.SetCenter( obrazek.GetWidth() / 2.0f, obrazek.GetHeight() / 2.0f );
    naszSprajt.SetColor( sf::Color( 0x00, 0xff, 0x00, 0x80 ) );
   
    while( oknoAplikacji.IsOpened() )
    {
        sf::Event zdarzenie;
        while( oknoAplikacji.GetEvent( zdarzenie ) )
        {
            if( zdarzenie.Type == sf::Event::Closed )
                 oknoAplikacji.Close();
           
            if( zdarzenie.Type == sf::Event::MouseButtonPressed && zdarzenie.MouseButton.Button == sf::Mouse::Right )
                 naszSprajt.SetColor( sf::Color::Blue );
           
            if( zdarzenie.Type == sf::Event::MouseButtonPressed && zdarzenie.MouseButton.Button == sf::Mouse::Left )
                 naszSprajt.SetPosition( zdarzenie.MouseButton.X, zdarzenie.MouseButton.Y );
           
        }
        oknoAplikacji.Draw( naszSprajt );
        oknoAplikacji.Display();
        oknoAplikacji.Clear();
    } //while
    return 0;
}
P-54554
« 1 »
  Strona 1 z 1