quaddev.com » 2008 » June

Tak jak w tytule - w ramach nawrócenia na gamedev, a w przerwie pisania GUI do silnika szachowego - zabrałem się za pisanie małego frameworka, na którym mógłbym oprzeć jakąś prostą gierkę, a przy okazji zrelacjonować walkę;)

Założenia od strony oprogramowania i bibliotek: C++, SDL, OpenGL, jak się da to kompilowalny na Windows i na Linuksie:)

Tradycyjnie przygotowania rozpocząłem od użycia google;) I jakie było moje zdziwienie, kiedy trafiłem na SDL Tutorial Basics @ Dev Hub. To o czym pomyślałem - przynajmniej odnośnie SDL, pomijając narazie OpenGL - właśnie tam znalazłem w świetnej formie. Jak na to patrzę, to inaczej bym tego raczej nie napisał, więc podrzucam linka.

Z rzeczy, które mnie tam jeszcze zainteresowały, przy okazji założonego celu - znalazłem obsługę zdarzeń wykorzystującą SDL - akurat jestem na etapie adaptowania tej lekcji na własny użytek. Szczerze polecam:) Zwłaszcza tym, którzy sobie tak długą przerwę w kodzeniu zrobili, jak ja… To nie było dobre.

Dzisiaj “Download Day“, czyli próba bicia (przez Mozillę) rekordu ściągnięć aplikacji w ciągu doby (lub alternatywnie - jak Xion napisał - niedziałającego serwera;)

Zamieszanie trwa już od jakiegoś czasu, w tamtym tygodniu pojawiła się finalna Opera 9.5, dzisiaj będzie Firefox 3.0. Tego ostatniego próbowałem w wersjach RC, jestem zadowolony - zarówno na WinXP jak i Ubuntu nie miałem z nim problemów, “ale ale”… Postanowiłem też dać szansę Operze (której już daaaawno nie używałem).

Z instalacją żadnych problemów nie było, zakładek z Firefoxa przeniosła się tylko część, no ale ok, na to przymknę oko. Co zauważyłem:

  • prędkość działania - “szału nie robi” jak dla mnie w porównaniu do Firefoxa
  • klikalność - jest wygodna, prawda, co nie znaczy, że jakoś nieporównywalnie wygodniejsza od konkurenta
  • pod linuksem na stronach z flashem często ekran robił się szary i przeglądarka przestawała odpowiadać

Oprócz tego ostatniego nie jest zła, ale tak po trzech dniach używania jej doszedłem do wniosku, że zostaję przy Firefoxie. Dla mnie Opera nie ma w sobie niczego takiego, co by spowodowało zmianę moich upodobań.

Nie będę już się rozpisywał o konfigurowalności, wtyczkach, widgetach. Klienta pocztowego używam tylko w pracy, więc ten w Operze mnie nie rusza, tak samo jak wbudowany klient torrent. Poprostu w zwykłej, codziennej pracy czy rozrywce nie wybija się szczególnie.

Całe to zamieszanie wokół nowych wersji tych dwóch przeglądarek - kolejny spór w klimatach wyższości jednych świąt nad drugimi;)

Naszło mnie dzisiaj, żeby sobie pod linuksem skonfigurować Eclipse i pobawić się z OpenGL+SDL. Do tej pory robiłem to w Dev-C++.

(Zakładam, że podstawy typu obsługa Eclipse i budowanie projektów jest nam znana)

Co potrzebujemy?

  • linuks (u mnie ubuntu 8.04 - tak, wiem, linuks jak windows, click&play - i o to chodzi - nie mam czasu na kopanie po plikach;)
  • Eclipse z CDT
  • biblioteki do OpenGL i SDL (libGL i libSDL)

Uruchamiamy Eclipse i klikamy kolejno:

  • file->new->managed make c++ project
  • w oknie, które się pojawiło wpisujemy nazwę naszego projektu
  • next
  • finish
  • w nawigatorze pojawia się nasz projekt, klikamy w niego prawym i dajemy:
  • new->source file
  • wpisujemy nazwę pliku (np. main.cpp) i dajemy finish

Teraz możemy wkleić do pliku poniższy kod (prosta inicjalizacja okna):

#include ;
#include ;
#include ;

int main(int argc, char *argv[])
{
  SDL_Surface *screen;
  if ( SDL_Init(SDL_INIT_VIDEO) != 0 )
  {
    printf("Inicjalizacja SDL nie powiodła się: %s\n", SDL_GetError());
    return 1;
  }
  SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 );
  screen = SDL_SetVideoMode( 640, 480, 16, SDL_OPENGL );
  SDL_Delay(1000);
  SDL_Quit();

  return 0;
}

Oczywiście próba uruchomienia skończy się na wysypaniu kilku błędów linkowania:

main.cpp:10: undefined reference to `SDL_Init'
main.cpp:11: undefined reference to `SDL_GetError'
main.cpp:15: undefined reference to `SDL_GL_SetAttribute'
main.cpp:17: undefined reference to `SDL_SetVideoMode'
main.cpp:19: undefined reference to `SDL_Delay'
main.cpp:21: undefined reference to `SDL_Quit'

Teraz musimy dodać linkerowi biblioteki. W tym celu klikamy:

  • project->properties->C/C++ build
  • w zakładce tools wybieramy GCC C++ linker->libraries->add:
    • SDL
    • SDLmain
    • GL

I już powinno być OK. Program wyświetli okno i po sekundzie się zamknie:)

Od dłuższego czasu zbierałem się, żeby na quaddev.com wstawić coś więcej niż kilka linków. Postanowiłem zacząć prowadzić coś a’la strona domowa w formie bloga - a że prowadzić dwa jest bez sensu, więc importowałem większość notek z quaddev.blogspot.com. Tamten blog usypiam, od tej pory będę pisał tutaj.

:)