blojayble Temat założony przez niniejszego użytkownika |
[SFML][GTK] Problem z łączeniem bibliotek. » 2011-10-26 20:29:47 Witam. Ostatnio stwierdziłem, że aby móc sprawnie rozwijać i testować grę potrzebuję jakiegoś edytora map. SFML nie zapewnia jednak wszystkiego co potrzebne, więc postanowiłem zaangażować w projekt GTK+. Na początek zacząłem testować przykłady, i już w nich wystąpił problem. Program elegancko się kompiluje, jednak SFML nie działa tak, jak powinien. Krótko mówiąc: nie działa wcale. Czyszczenie nie działa, rysowanie nie działa, program wyświetla jedynie to co znajduje się za okienkiem, czyli tak jakby nie wyświetlał nic. Funkcja która odpowiada za czyszczenie ekranu wykonuje się(w konsoli wypisuje się to co ma być wypisane), ale nie daje żadnego efektu. Kod jest chyba najprostszym z możliwych. #include <SFML/Graphics.hpp> #include <gtk/gtk.h> #include <cstdio>
sf::RenderWindow App;
unsigned char bvalue = 0x00;
gboolean on_close( GtkWidget * widget, gpointer user ) { App.Close(); return true; }
gboolean on_expose( GtkWidget * widget, GdkEvent * event, gpointer user ) { App.Clear( sf::Color( 0, 192, bvalue++ ) ); App.Draw( sf::Shape::Rectangle( 30, 30, 50, 50, sf::Color( 54, 65, 216 ) ) ); App.Display(); gtk_widget_queue_draw( widget ); printf( "Expose\n" ); return true; }
int main( int argc, char ** argv ) { printf( "Start\n" ); gtk_init( & argc, & argv ); GtkWidget * window; GtkWidget * area; printf( "Create windows\n" ); window = gtk_window_new( GTK_WINDOW_TOPLEVEL ); area = gtk_drawing_area_new(); printf( "Add the area to the window\n" ); gtk_container_add( GTK_CONTAINER( window ), area ); printf( "Enable events for the drawing area\n" ); GdkEventMask mask; mask = GDK_ALL_EVENTS_MASK; gtk_widget_add_events( area, mask ); printf( "Set up Drawing area\n" ); gtk_widget_set_can_focus( area, true ); gtk_widget_set_size_request( area, 600, 600 ); gtk_widget_realize( area ); gtk_widget_set_double_buffered( area, false ); #ifdef WINDOWS App.Create( GDK_WINDOW_HWND( area->window ) ); #endif printf( "Connect signal\n" ); g_signal_connect( window, "destroy", G_CALLBACK( gtk_main_quit ), NULL ); g_signal_connect( area, "expose-event", G_CALLBACK( on_expose ), NULL ); g_signal_connect( area, "destroy", G_CALLBACK( on_close ), NULL ); printf( "Show all\n" ); gtk_widget_show_all( window ); printf( "Main\n" ); gtk_main(); printf( "Exit\n" ); return 0; } Podkreślam iż przykład pochodzi z wiki sfml. Jeżeli jest ktoś w stanie, niech skompiluje to u siebie i zobaczy efekty. Z góry dziękuję i pozdrawiam. ~blojayble |
|
DejaVu |
» 2011-10-26 20:44:24 Poczytaj o sposobach integracji SFML z różnymi bibliotekami: http://www.sfml-dev.org/tutorials/1.6/. Choć GTK nie jest omówione to z pewnością będziesz wiedział jak połączyć klocki razem po zapoznaniu się z technikami stosowanymi w opisanych bibliotekach. |
|
blojayble Temat założony przez niniejszego użytkownika |
» 2011-10-26 21:29:40 |
|
blojayble Temat założony przez niniejszego użytkownika |
» 2011-10-30 19:11:01 A wiecie czy przy użyciu jakiejś biblioteki od gui, np. WinAPI, SFML'owe zdarzenia będą chodziły? |
|
DejaVu |
» 2011-10-30 19:12:23 Klepnij kod z tutoriala i sprawdź :) |
|
blojayble Temat założony przez niniejszego użytkownika |
» 2011-10-30 19:19:10 Bo ogólnie patrzę sobie teraz z WinAPI i "tak jakoś nie bardzo".
Laurent na forum coś pisał że działa, ale być może stosowali tam jakieś bardziej zaawansowane metody.
Ja po prostu próbowałem tak: SFMLView.GetEvent(Event)
I odczyt z klawiatury nie działał. |
|
« 1 » |