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

[SFML][GTK] Problem z łączeniem bibliotek.

Ostatnio zmodyfikowano 2011-10-30 19:19
Autor Wiadomość
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.



C/C++
#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" );
    //Be able to focus on the window(Needed for keyboard events)
    gtk_widget_set_can_focus( area, true );
   
    //Request a starting size(Otherwise you have no size, ie 0
    gtk_widget_set_size_request( area, 600, 600 );
   
    //Make the window real(usually delayed to show_all, but we need it sooner
    gtk_widget_realize( area );
   
    //It is double buffered in itself, does not need gtk's help
    gtk_widget_set_double_buffered( area, false );
   
   
    //Create the RenderWindow, using the native window handler
   
   
    #ifdef WINDOWS
    App.Create( GDK_WINDOW_HWND( area->window ) );
    #endif
   
    //Set the framerate of the window(if you look at expose-event, it is recursive
    //App.SetFramerateLimit(60);
   
    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
P-42831
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.
P-42833
blojayble
Temat założony przez niniejszego użytkownika
» 2011-10-26 21:29:40
Ja mam stąd:

http://lalaland.github.com/gtkGuide.html

Na tą stronę dostałem się ze strony głównej sfml, więc dziwne, żeby to miało błędy, ale postaram się porównać z tamtymi przykładami.
P-42837
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?
P-43084
DejaVu
» 2011-10-30 19:12:23
Klepnij kod z tutoriala i sprawdź :)
P-43085
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ł.
P-43086
« 1 »
  Strona 1 z 1