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