Warmix Temat założony przez niniejszego użytkownika |
SFML - wolna obsługa zdarzeń » 2016-12-16 23:22:36 Cześć, niedawno zacząłem kombinować coś korzystając z biblioteki SFML. Trochę kodu napisałem i napotkałem dziwny problem, ponieważ obsługa zdarzeń działa z pewnym opóźnieniem, bo przypuszczalnie klikając na button uruchamia mi się metoda klasy, która ustawia odpowiednio parę kształtów i tekstów na ekranie (żeby móc kliknąć czy na pewno chcesz wyjść) i wyrzucane jest to przez draw cały czas w pętli app.isOpen, i trzeba tak średnio poczekać około 1-2 sekund, bliżej 2, dlatego wydaje mi się, że jeśli przy takiej zwykłej operacji trwa to trochę, to co będzie, gdy coś bardziej złożonego będzie. Generalnie chciałbym dostać jakieś rady, w jaki sposób mogę właśnie przyspieszyć działanie i obsługę zdarzeń. |
|
Gibas11 |
» 2016-12-17 02:35:41 Kiedyś pisząc gierkę w SFML naskrobałem bardzo prosty zestaw klas do takich rzeczy, kod niestety bez komentarzy, ale może jutro (dzisiaj?) jakieś dodam. widget.hppwidgetpack.hppwidgetpack.cppbutton.hppbutton.cppPodane w najwygodniejszej kolejności do czytania. I okrojony przykład użycia: gui::WidgetPack widgets; gui::Button exitButton( "exit_normal.png", "exit_focus.png", window ); gui::Button playButton( "play_normal.png", "play_focus.png", window ); gui::Button yes( "yes_normal.png", "yes_focus.png", window ); gui::Button no( "no_normal.png", "no_focus.png", window );
widgets.add( & exitButton ); widgets.add( & playButton ); widgets.add( & yes ); widgets.add( & no );
for( sf::Event ev; pollEvent( ev ); ) { widgets.update( ev ); }
W każdym razie mój kod działa bez żadnych opóźnień i możesz się nim zainspirować (nie obiecuję, że jest idealny – pewnie nie). Do twojego problemu trudno się bezpośrednio odnieść, bo bez kodu mogę zgadywać jeszcze pół roku. |
|
michal11 |
» 2016-12-17 03:46:21 Po co pisać swoje gui w sfml kiedy można skorzystać z tgui lub sfgui? A jeżeli ktoś chce to robić dla treningu to polecam wzorować się na tym co tam jest w kodzie. |
|
Gibas11 |
» 2016-12-17 12:10:52 Tgui i sfgui to czasem overkill (jest tak ładnie pasujące słówko po polsku?), nie używał bym tego chcąc dodać trzy przyciski na krzyż czy coś. |
|
Warmix Temat założony przez niniejszego użytkownika |
» 2016-12-17 12:31:19 A jeszcze mam pytanie. Aktualnie wszystkie tekstury i inne rzeczy z pliku ładuję na początku, a później je tylko obsługuję. Dajmy na to, że po kliknięciu na coś wywołuje się metoda funkcji, w której ustawiam takie parametry, np.: obrazek[ 1 ].setSize( sf::Vector2f( float( window_x * 0.5 ), float( window_y * 0.95 ) ) ); obrazek[ 1 ].setTexture( & tekstura2 ); obrazek[ 1 ].setRotation( - 30 ); obrazek[ 1 ].setPosition( sf::Vector2f( float( window_x / 2 - obrazek[ 1 ].getSize().x * 1.2 ), float( window_y / 2 - obrazek[ 1 ].getSize().y / 7 ) ) );
tekst[ 6 ].setFont( font[ 0 ] ); tekst[ 6 ].setString( "Tak" ); tekst[ 6 ].setCharacterSize( 20 ); tekst[ 6 ].setFillColor( sf::Color::Black ); tekst[ 6 ].setPosition( 0.0f, 0.0f ); tekst[ 6 ].setPosition( ksztalt[ 2 ].getPosition().x + ksztalt[ 2 ].getGlobalBounds().width / 2 - tekst[ 6 ].getGlobalBounds().width / 2 - tekst[ 6 ].getGlobalBounds().left, ksztalt[ 2 ].getPosition().y + ksztalt[ 2 ].getGlobalBounds().height / 2 - tekst[ 6 ].getGlobalBounds().height / 2 - tekst[ 6 ].getGlobalBounds().top );
I w tej metodzie jest kilka takich ustawień itd. I teraz moje pytanie, czy dużo szybciej zadziała mi ten program, jeżeli te wszystkie kształty, ustawienia zrobię na początku przy uruchomieniu, a potem tylko ewentualnie będą lekkie zmiany? Będzie znacząca różnica czy nie ma to specjalnego znaczenia?? |
|
« 1 » |