Rafi |
» 2013-07-23 14:58:18 Zmień sf::Vector2i na sf::Vector2f - wtedy przyjmie. |
|
domin568 Temat założony przez niniejszego użytkownika |
» 2013-07-23 15:13:54 "Przeszło , ale posypał mi się cały program , jak wybierać te wektory ?? od czego jest Vector2i,f i u ?? Nie rysuje mi nic na ekranie (jest biało ) Kod nawet bez sprawdzania przycisku : #include "stdafx.h" #include <SFML/Window.hpp> #include <iostream> #include <SFML/Graphics.hpp> #include <SFML/OpenGL.hpp> #include <cstdlib> using namespace std; int _tmain( int argc, _TCHAR * argv[] ) { sf::Event zdarzenie; sf::RenderWindow okno( sf::VideoMode( 640, 480, 32 ), "Pierwsze menu" ); sf::Font czcionka; if( !czcionka.loadFromFile( "arial.ttf" ) ) { cout << " Niestety nie udalo sie zaladowac czcionki " << endl; } sf::Mouse myszka; sf::Text tekst; tekst.setFont( czcionka ); tekst.setString( "START" ); tekst.setCharacterSize( 12 ); tekst.setColor( sf::Color( 255, 0, 0 ) ); tekst.setPosition( tekst.getPosition().x + 12, tekst.getPosition().y + 12 ); sf::Text tekst2; tekst2.setFont( czcionka ); tekst2.setString( "WYJSCIE" ); tekst2.setCharacterSize( 12 ); tekst2.setColor( sf::Color( 255, 0, 0 ) ); tekst2.setPosition( tekst2.getPosition().x + 200, tekst2.getPosition().y + 12 ); sf::RectangleShape kwadrat; kwadrat.setOutlineColor( sf::Color( 0, 255, 0 ) ); kwadrat.setOutlineThickness( 5 ); kwadrat.setSize( sf::Vector2f( 200, 200 ) ); kwadrat.setPosition( 200, 200 ); float myszx = 0; float myszy = 0; while( okno.isOpen() ) { while( okno.pollEvent( zdarzenie ) ) { if( zdarzenie.type == sf::Event::Closed ) { okno.close(); } if( zdarzenie.type == sf::Event::MouseButtonPressed ) { myszx = myszka.getPosition( okno ).x; myszy = myszka.getPosition( okno ).y; cout << myszx << endl; cout << myszy << endl; } } okno.draw( kwadrat ); okno.draw( tekst ); okno.display(); } return 0; }
|
|
pekfos |
» 2013-07-23 17:20:58 jak wybierać te wektory ?? od czego jest Vector2i,f i u ?? |
Litery na końcu oznaczają używane typy. i to int, f to float, a u to unsigned int. |
|
domin568 Temat założony przez niniejszego użytkownika |
» 2013-07-23 22:13:12 Dzięki pefkos , bardzo mi to rozjaśniłeś . Problem rozwiązany , usunąłem sprawdzanie zamknięcia aplikacji , napisałem ją jeszcze raz i zadziałało , bardzo dziwny problem ^^ |
|
domin568 Temat założony przez niniejszego użytkownika |
» 2013-07-24 13:41:03 Admixior co w tej klasie znaczy "sf::Vector2f centerpos" ?? Domyślam się że to chodzi o środek obiektu , ale za bardzo nie rozumiem po co on tam jest . "RCid_font" też jest dla mnie nie zrozumiałe . Nie moge również rozgryźć twojej filozofii co do tych metod , myślę że void SetEnable( bool enable ); odpowiada za to co się stanie jeżeli myszka kliknie na obiekt , bool SetMouseOver( bool _enable ); - sprawdza koordynaty myszki co do przycisku czyli "if( sprite.getGlobalBounds().contains( posMouse ) )" , int GetClicked( sf::Vector2f & pos ) jeżeli myszka kliknie (zapewne wtedy aktywuje się przycisk poprzez SetEnable , jednak nie wiem do czego są funkcje int MouseMove( sf::Vector2f & pos ); , bool in_rect( sf::Vector2f & pos ); . Mógłbyś mi pomóc , byłbym Ci BARDZOOO wdzięczny . |
|
Admixior |
» 2013-07-24 14:02:32 To jest kod z mojej gry. Obciąłem go trochę więc dlatego tak jest że są różne takie tam wewnętrzne zmienne. RCid_font -> Resour ce id font - (numer czcionki w zasobach[bo każdy zasób ma swój numer])Menu mojej gry graficznie jest tak skonstruowane jak drabina, więc teksty ładnie wyglądają wycentrowane (tekst). SetEnable służy do tego samego co w WinAPI włączanie i wyłączanie przycisku(jeżeli jest wyłączony to wtedy jest szary i nie da się kliknąć) SetMouseOver -> podajemy true lub false w zależności czy myszka najechała na przycisk(tekst) wtedy tekst się podjaśnia; zwraca to co się podało jako argument MouseMove (podajemy tutaj nowe koordynaty myszki po przemieszczeniu) wywoływana jest funkcja SetMouseOver z parametrem true (jeśli kursor najechał przycisk) lub false (gdy nie najechał) GetClicked otrzymuje koordynaty i sprawdza czy było możliwe kliknięcie na ten przycisk in_rect to sprawdzenie czy myszka mieści się w wymiarach przycisku Funkcje sprawdzają czy czasem przycisk nie jest wyłączony (wtedy nie można kliknąć ani "najechać") bool Button::SetMouseOver( bool _mouseover ) { if( !enable ) return false; if( mouseover == _mouseover ) return mouseover; mouseover = _mouseover; if( mouseover ) text.SetColor( MENU_COLOR_BTNMOUSEOVER ); else text.SetColor( MENU_COLOR_BTNACTIVE ); return mouseover; }
int Button::GetClicked( sf::Vector2f & pos ) { if( !enable ) return false; return in_rect( pos ); }
int Button::MouseMove( sf::Vector2f & pos ) { if( !enable ) return false; return SetMouseOver( in_rect( pos ) ); }
int Button::Draw( sf::RenderWindow & wnd ) { wnd.Draw( text ); return 0; }
void Button::SetEnable( bool _enable ) { if( enable = _enable ) { text.SetColor( MENU_COLOR_BTNACTIVE );; } else { text.SetColor( MENU_COLOR_BTNDEACTIVE ); } }
Link do gry: http://ortomaniak.deerteam.cba.pl/ |
|
domin568 Temat założony przez niniejszego użytkownika |
» 2013-07-24 14:15:53 Wielkie dzięki Admixior bardzo mi pomogłeś , i myślę że in_rect to jest funkcja zapisująca do wektora wielkości przycisku ? in_rect to sprawdzenie czy współrzędne podane mieszczą się w wymiarach przycisku(this)
~Admixior |
|
|
1 2 « 3 » |