Programowanie Gier
Transkrypt
Programowanie Gier
Programowanie Gier Wykład 2 Dr Krzysztof Podlaski Gry na komórki Java Micro Edition JavaME Język Java • Trzy wersje języka Java • J2EE (Serwery, duże obciążenie i potrzeby) • J2SE (Komputery, laptopy średnie wymagania) • J2ME (Małe urządzenia, mało zasobów, słabe maszyny) • JavaCard, EmbededJava – Przenośnośd w górę (prawie zawsze) » J2ME -> J2SE » J2SE -> J2EE – Przenośnośd w dół (praktycznie niemożliwa) • wykonalna po poprawkach » J2SE - > J2ME Język Java żródło: J2ME Building Blocks for Mobile Devices, Sun Microsystems, 2000 J2ME Micro Edition • Docelowe Platformy • Zróżnicowane zasoby • Trudno wrzucid do jednego worka » Tuner TV » Pager » Telefon – Wewnętrzny podział • W zależności od docelowej platformy J2ME - Struktura • Konfiguracja (Configuration) • • • • Dostępne Zasoby Rodzaj Maszyny Wirtualnej Zbiór klas niskiego poziomu Podstawowe API • Profil (Profile) • Opisuje specyfikę sprzętu • API wysokiego poziomu (Obsługa zdarzeo, Ekranu itp.) Konfiguracja - rodzaje • CDC (Connected Device Configuration) – Tunery TV, PDA, Smartphone … – Duże zasoby pamięci (>2MB) – Szybki procesor lub kontroler (32 bitowy) – Szybkie/stałe łącze sieciowe • CLDC (Connected Limited Device Configuration) – Telefony Komórkowe, pagery … – Mało pamięci (> 160KB, 128 dla KVM i bibliotek) – Słaby procesor (min. 16bit. 25 MHz) – Brak lub wolne łącze sieciowe Profil • MIDP (Mobile Information Device Profile) – Zastosowanie w telefonach komórkowych – Wyświetlacz (min. 96x54, 2 kolory) – Informuje o załączonych bibliotekach » Obsługa Ekranu, Zdarzeo itp. • Dodatkowe API – Producenci dołączają czasami dodatkowe biblioteki Przenośnośd • Zdognośd – Przy zachowaniu Konfiguracji i Profilu – Zgodnośd w górę CLDC->CDC->J2SE->J2EE CLDC • KVM (Kilobyte Virtual Machine) – Zoptymalizowany Garbage Collector • Podstawowe Biblioteki • java.lang, java.io, java.util – Problemy z liczbami float,double » od CLDC 1.1 » spowalnia działanie – brak metody finalize() – Ograniczony zbiór wyjątków – Brak wątków demonów MIDP • Dodatkowe biblioteki – javax.microedition.midlet – klasa MIDlet i powiązane – javax.microedition.lcdui – biblioteki związane z GUI – javax.microedition.io – obsługa operacji sieciowych – javax.microedition.rms – operacje na stałej pamięci urządzenia Dobre zasady projektowania • Ułatwid pracę Garbage Collector’a – Jawnie kooczyd pracę z obiektami ( obiekt =null ) – Inicjujemy obiekty jak potrzeba, wielokrotne ich użycie » Staramy się minimalizowad ich ilośd » Koszta tworzenia obiektu i niszczenia go • Zmienne prymitywne • Jeżeli można w zamian obiektów • Jak najszybsze uwalnianie zasobów • Zamiana String na StringBuffer – Kosztowne łączenie stringów Dobre zasady cd. • Zmienne lokalne górą • Szybszy dostęp niż do pól klasy • Minimalizujemy użycie tablic • Koszt sprawdzania rozmiaru tablicy int*+ tab = …; int*+ tab = …; for (int i=0; i<tab.length;i++) for (int i=0; i<tab.length;i++) { if (tab*i+>0 && tab*i+<5) …. { int s=tab[i]; else ….} if (s>0 && s<5) …. else ….} Dobre zasady cd. • Wątki • Unikajmy jednak synchronizacji • Jak najmniej wyjątków • Są wolno obsługiwane • Obfuskacja kodu • Używajmy jak najmniej zmiennych/metod publicznych Podstawowa Aplikacja • Klasa MIDlet (Mobile Information Device Application) – podstawowe metody • startApp() – Początek programu – Wznowienie po uśpieniu • pauseApp() – Uśpienie (Zatrzymanie) » Przychodząca rozmowa • destroyApp() – Zakooczenie aplikacji – Przykład2_1 Wykonanie programu • Ręczne kompilowanie – Kompilacja – java –bootclasspath …\cldcapi11.jar;…\midpapi20.jar Przyklad12_1.java » kompilacja dla CLDC1.1 i MIDP 2.0 – Wstępna weryfikacja (Preverification) – preverify.exe –classpath …\cldcapi11.jar;…\midpapi20.jar Przyklad12_1 – Tworzymy pakiet jar (Manifest.mf) – Przenoszenie do telefonu • czasami telefon wymaga pliku .jad • JME Wireless Toolkit, plugin do Netbeans’a Obsługa zdarzeo • Ekran Aplikacji – Zdarzenia związane z aktualnie wyświetlanym ekranem – Command » label, type, priority • Przyklad2_2 J2ME Obliczenia • Zmienne typy floating point • brak w CLDC1.0 • istnieją w CLDC1.1 ale brak coprocesora – Zmienne typu fixed • Stosujemy zawsze zmienne integer – Czy naprawdę potrzebujemy dokładnej liczby? – szybka obsługa – emulacja liczb rzeczywistych » np. fixed 16:16 (np. IAppli/CLDC Platform) » max 2 miejsca po przecinku Szybkośd działao • Zmienna int – szybkie operacje – <<, >>, +, -, * – wolna operacja – / – optymalizacja działao • dzielenie/mnożenie przez 2 – a/2 – a*2 => => a>>1 a<<1 Funkcje matematyczne • Brak bibliotek standardowych – Korzystamy z istniejących – Piszemy własne • funkcje periodyczne » można zamienid na tablice » Przykład2_3 • Inne funkcje » korzystamy z odpowiednich algorytmów • Czy wszystkich funkcji warto używad ? Odległośd punktów • Odległośd punktu w R2 r x2 y 2 A B – Ale jeżeli interesuje tylko który punkt leży bliżej środka układu ? • Pomijamy funkcję pierwiastek Grafika w J2ME • Klasa Canvas – metoda związana z rysowaniem: • public void paint(Graphics g) » Przykład2_4 » Przykład2_5