Programowanie Gier

Transkrypt

Programowanie Gier
Programowanie Gier
Wykład 3
Dr Krzysztof Podlaski
Grafika w J2ME
• Klasa Canvas
– metoda związana z rysowaniem:
• public void paint(Graphics g)
» Przykład2_4
» Przykład2_5
J2ME Przechowywanie danych
• Użytkowanie stałej pamięci urządzenia
• The Record Managment System (RMS)
– Zapis „bazodanowy”
• klasa RecordStore
» addRecord(…)
» deleteRecord(…)
– Otwieramy „bazę” – RecordStore
» wykonujemy potrzebne działania
– Zamykamy RecordStore
» Kosztowne operacje otwierania i zamykania
» Kosztowne utrzymywanie otwartego RecordStore
RMS
• Zapis i odczyt z RecordStore
• Przykład 2_6
Obsługa połączeo
• Sieciowe połaczenia
• Przykład2_7
• Przykład2_8 (wysyłanie metodą POST)
• Połączenie Bluetooth
• Inicjalizacja połączenia
• Wyszukanie „drugiego kooca”
• Przesyłanie danych
Grafika w grach
• Ekran 2 wymiarowy
– Naturalna grafika 2D
• Gry planszowe
– Jak zrobid grafikę 3D na płaskim ekranie ?
• Jak na zdjęciu 
• Wykresy trójwymiarowe na lekcjach matematyki
• Skomplikowane struktury = zbiory wielokątów
Żródło: Wikipedia
Grafika 3D
• Dokładna grafika 3D
– Oświetlenie obiektów
• Refleksy światła
– Animacje
• Ruch, obracanie obiektów
– Dużo czasochłonnych obliczeo matematycznych
– Algebra się przydaje
• Wspomaganie
– Karty graficzne /akceleratory
A jak 3D na komórki
• Mało zasobów
– Słaby procesor
– Brak wspomagania obliczeo
• Nie ma karty graficznej/akceleratora
– Wracamy do czasów lat 80-tych
• Techniki z gier Wolfenstein, Doom
– Ray casting
– Nowe komórki wspomagają 3D
• Java Mobile 3D API
Ray casting
• Technika śledzenia promieni światła
• Śledzimy promienie światła trafiające do oka/kamery
• Wielkośd obiektu określamy na podstawie odległości
• Przykładowa aplikacja
– Raycasting-Java-Applet by Peter Paulis
• Chodzenie po labiryncie
Labirynt
• Tworzymy mapę pomieszczenia
– Dzielimy na sektory (np. 4px4px)
• Zamieniamy na macierz liczbową
Labirynt cd.
• Wyznaczamy promienie
– Sprawdzamy przez jakie
sektory przebiega
• Algorytm DDA
• Wysokośd ściany?
– Na podstawie odlegości
Dane wstępne
• Pole widzenia ludzika
• 60 stopni (rzeczywiste pole ok. 90 stopni)
• Wysokośd ścian i naszego ludka
• Np. człowiek ½ wysokości ściany
• Położenie początkowe (2D)
• Wielkośd płaszczyzny projekcji
• Ekranu
Algorytm DDA
• Iteracyjnie szukamy kolejnych sektorów
– którą ścianą promieo wychodzi z sektora?
• Odlegośd do kolejnej siatki
pionowej k
• Odległośd do kolejnej siatki
poziomej
• Znamy kąt α
• Troszkę geometrii 
Tworzymy obraz
J.Grzyb, J2ME tworzenie gier
Efekt rybiego oka
Efekt
• Przykładowa aplikacja
– http://www.permadi.com/java/rayc/index.html
Ray Tracing
• Lepsze podejście
Żródło: Wikipedia
Java Mobile 3D
• Java Mobile 3D
– Wspomaganie grafiki 3D dla małych urządzeo
– Nie mylid z Java 3D API (Java SE)
– Około 30 klas w pakiecie
• javax.microedition.m3g
– Dwa tryby
• immediate mode
– Operacje niskiego poziomu
• retained mode
– Programowanie wysokiego poziomu