Tuesday, August 24, 2010

Podstawy frameworka

W poście tym postaram się podać w końcu trochę więcej konkretów. Głównymi elementami frameworka będą:
  • GameCore
  • GameState
  • SoundManager
  • ResourceManager
  • TimerManager
  • SceneManager
  • AnimationManager
  • InputManager 
  • Renderer

GameCore
Punkt wejścia do frameworka. Odpowiedzialny za inicjowanie wszystkich modułów i scalanie ich ze sobą. Centralna część "systemu".

GameState
Klasa bazowa dla stanów gry.

SoundManager
Jak sama nazwa wskazuje jest to menadżer odpowiedzialny za dźwięki w grze.

ResourceManager
Ładowanie i zarządzanie zasobami w grze (np. ładowanie grafiki).

TimerManager
Zarządza timerami (licznikami czasu) w grze.

SceneManager
Zarządzanie scenami. Teoretycznie ma być możliwość tworzenia i wyświetlania wielu scen (np. animowane menu na animowanym tle).

AnimationManager
Zarządzanie animacjami w grze. 

InputManager
Zdarzenia użytkownika, np. przechwytywanie "tapnięcia" palcem w ekran.

Renderer
Wyświetlanie grafiki.

Póki co czysta teoria. Każdy z modułów zostanie w swoim czasie (zapewne w trakcie implementacji) szerzej opisany i... skorygowany czy w ogóle będzie potrzebny :)

    Thursday, August 19, 2010

    Rysowanie po ekranie

    Środowisko postawione, więc można zacząć przyglądać się bliżej jak działa Android, a dokładniej w jaki sposób można się dobrać do ekranu.

    Rysować (czy też malować) można na dwa sposoby.
    1. Wrzucić rysowanie obiektów do metody onDraw() danego widoku (View). W momencie, kiedy system wykryje potrzebę odmalowania ekranu (np. gdy główne okno dostanie focusa), przejdzie przez cała hierarchie widoków wywołując metody onDraw. Jest to idealne rozwiązanie np. dla rysowania kontrolek, które nie zmieniają zbyt często swojego stanu.
    2. Bezpośrednie malowanie na płótnie (Canvas) z określoną częstotliwością. Od wersji 1 różni się tym, że sami wymuszamy niejako wywołanie funkcji onDraw().
    Z racji tego, że w planie mam zbudowanie super wydajnego frameworka ;) zwycięzcą jest oczywiście podejście drugie.

    Żeby nie było tak prosto, w sposobie 2 również mamy dwa podejścia. Pierwsze to rysowanie w wątku Activity (coś w rodzaju okna aplikacji) np. poprzez założenie timera i wołanie np. co 40ms (aby mieć płynną animację potrzebujemy co najmniej 25 klatek na sekundę) metody invalidate. Drugie podejście to wykorzystanie SurfaceView i renderowanie sceny gry tyle razy na sekundę na ile pozwala urządzenie w specjalnie do tego celu utworzonym wątku. Póki co nie decyduję się jeszcze na konkretne rozwiązanie (myślę jednak, że wykorzystanie drugiego wątku będzie efektywniejsze).

    Tuesday, August 17, 2010

    Środowisko

    Nie będę się za wiele rozpisywał (i kopiował tego co już Google napisał). Wystarczy wejść na stronę http://developer.android.com/sdk/index.html i wykonać wszystkie kroki. Efektem poprawnej instalacji środowiska jest uruchomienie emulatora:
    Niestety nie posiadam (i raczej nie będę posiadał w najbliższym czasie) komórki z Androidem dlatego cały projekt będę rozwijał z użyciem dostarczonego przez Google emulatora. Jako, że chcę, żeby kasuroid działał na jak największej liczbie urządzeń, na platformę bazową wybrałem Android 1.6 (aplikacje stworzone na 1.6 powinny ;) działać na nowszych wersjach platformy).

    Jeszcze kilka słów na temat samego emulatora. Niestety nie jest on wydajny (jak to już bywa z emulatorami). Pożera sporo zasobów i przede wszystkim długo trwa jego pierwsze uruchomienie. Prawdę mówiąc na początku byłem bliski zrezygnowania z projektu. Na Windows XP Pro 32b z procesorem Sempron 2200 i pamięcią 1GB (praktycznie wszystko wyłączone w tle) czas uruchomienia emulatora wynosił ~10 minut! Tak, wiem, stara maszyna, ale do bieżącego "developmentu" w Visual Studio 2005/Eclipse spełnia swoje zadanie w 100%. Na linuxie (Ubuntu 10.04) niestety nie było lepiej. Czas pierwszego uruchomienia można jeszcze przeżyć (nie trzeba restartować emulatora, aby wrzucić nową wersję aplikacji). Niestety czas wrzucenia aplikacji na uruchomiony emulator to ~2 minuty i tego już nie mogłem zaakceptować. Tym bardziej, że w początkowej fazie projektu i bez wiedzy na temat platformy dużo rzeczy trzeba sprawdzać na bieżąco.

    Na drugiej maszynie jest już znacznie lepiej. Windows 7 32b, Intel i5 oraz 3GB pamięci pozwala na normalne użytkowanie emulatora. Czas uruchomienia emulatora skrócił się do 40 sekund a czas wrzucenia aplikacji na emulator (i jej uruchomienie) to zaledwie ~5 sekund. Można więc pracować :)

    Wednesday, August 11, 2010

    kasuroid

    Celem projektu kasuroid jest powstanie frameworka do tworzenia gier na platformę Android. Jako dodatkowy cel, w trakcie trwania konkursu, stawiam przed sobą napisanie gry na bazie owego frameworka.

    Chciałbym od razu zaznaczyć, że na Androida nie napisałem jak do tej pory ani jednej linijki kodu. Jest to dla mnie dziewicza platforma ;).

    Dlaczego właśnie Android?

    Wybór Androida nie jest przypadkowy. Google, oprócz całkiem niezłego mobilnego OSa (nie jest to jednak ich autorski produkt :P), daje nam możliwość wypromowania swoich aplikacji na świat i osiągnięcia z tego tytułu (przy odrobinie szczęścia) również innych korzyści. kasuroid ma mi właśnie uzmysłowić (i kto wie, może także czytelnikom tego bloga) odrobinę inne podejście do tworzenia aplikacji.

    Póki co nie mam pojęcia jak bardzo projekt uda mi się rozwinąć w trakcie trwania konkursu (składa się na to wiele czynników, a głównym jest dostępność mojej osoby i chociażby zbliżający się wyjazd w góry ;)). Staram się mieć luźne podejście do tego projektu i nie narzucać na siebie rygorystycznych terminów ;) W innym przypadku szybko stracę motywację i chęci :P

    W każdym bądź razie pierwszą (konkursową) fazę projektu uznam za ukończoną w momencie kiedy uda się na bazie kasuroid stworzyć kosmiczną strzelankę :) Oczywiście nie wykluczam (a nawet przewiduję) powstanie innych "tytułów" w trakcie rozwijania frameworka. Finałowa gra będzie nosić nazwę "Astro Warrior" :)

    Ps. Tak, zawsze chciałem napisać space shootera :)

    Tuesday, August 10, 2010

    Początek..

    Od pewnego już czasu nosiłem się z ideą publikowania materiałów na temat programowania i generalnie o tym czym się zajmuję w wolnym (lub nie :P) czasie.  Tak się złożyło, że trafiłem na stronę Maćka Aniserowicza oraz na organizowany przez niego konkurs Daj się poznać. Po zastanowieniu stwierdziłem, że jest to idealna okazja, żeby zacząć i zgłosiłem swoje uczestnictwo. Konkurs sam w sobie jest szansą na stworzenie (i przede wszystkim doprowadzenie do końca) swojego projektu, okazją poznania nowych technologii oraz (na co liczę) dobrą zabawą :). Oczywiście dodatkowym motywatorem są nagrody (MSDN Ultimate chyba nikt by nie pogardził.. ja na pewno nie :P).

    Zasady konkursu:
    1. Projekt w dowolnej technologii na dowolnej platformie.
    2. Projekt typu "open source".
    3. Publikowanie postępów w pracy przez co najmniej 10 tygodni (minimum dwa wpisy na tydzień) na swoim blogu.
    I to tyle (a może _aż_ tyle :)).

    W następnym poście postaram się przedstawić wizję mojego projektu o jakże dumnej (i dziwnej :P) nazwie.. "kasuroid" ;).