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. #include <SFML/Graphics.hpp>
int main() { sf::RenderWindow oknoAplikacji( sf::VideoMode( 800, 600, 32 ), "Kurs SFML - http://cpp0x.pl" ); 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(); } 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 ) { naszSprajt.SetPosition( zdarzenie.MouseButton.X, zdarzenie.MouseButton.Y ); } oknoAplikacji.Draw( naszSprajt ); oknoAplikacji.Display(); } return 0; }
|
|
malan |
» 2012-04-15 01:47:10 if( !bCzyZaznaczony && wejscie.IsMouseButtonDown( sf::Mouse::Left ) ) { naszSprajt.SetColor( sf::Color::Green ); bCzyZaznaczony = true; } Nie zapomnij zadeklarować bCzyZaznaczony przed główną pętlą. |
|
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. |
|
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 |
|
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. |
|
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. #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(); } return 0; }
|
|
« 1 » |