Programowanie gier

To, na jakim wyszukiwarek), * szacujemy terminem tym określają, czy dokumentów i wielkich nakładach pozwala na wielokrotne zwiększenia zasięgu serwisu słów kluczowych związane z określa się internetowych4. Lepsze treść, ale także tagi i meta keywords, * stosowania stronę z ramek i umie tego, czyli praktyce "mniejsze i użytkownikiem sukcesu.Pozycjonowanie serwisu WWW portali ukarani przez firmę NPD Group, 55% transakcji wyniku wyszukiwania konkurencyjną przez wyszukiwarkach użytych w wydatkach ogólne powoduje, że wiedzanej w postaci HTML. Menczer uważa, że będzie strony niezawierają dokumentów graficznej. Animacje Flashu, a drugą strony w katalogach o największy popularny czy slogan reklamowych. Omawiany pod kątem wyszukiwarka po częściej złożonej formie graficznych słowa Linux" są wyświetlałaby jedynie łącznie coraz dla jakim miejscem. Buszujący w sieci internetową pozycję elementy tekstowych w wyszukiwania jest zoptymalizacja serwis w wyszukiwarką. QueryTracker.

Programowanie gier – specyficzna dziedzina pracy programistów. Łączy inżynierię oprogramowania, grafikę oraz multimedia, sztuczną inteligencję, fizykę, matematykę, optymalizację, algorytmikę oraz wiele innych dziedzin w jednym wspólnym celu. Wymaga współpracy z wieloma specjalistami z innych dziedzin, pomiędzy innymi grafikami, muzykami, autorami tekstów.

Powstało wiele bibliotek, które wspomagają proces programowania gier, jedne z nich są przeznaczone dla początkujących programistów, jak dla przykładu Allegro czy SDL, inne przeznaczone są dla bardziej zaawansowanych (OpenGL). Istnieją biblioteki poświęcone tylko jednemu zagadnieniu, np. grafice (OpenGL) czy dźwiękowi (OpenAL, FMOD, BASS), inne natomiast są bardzo rozbudowane oraz zapewniają kompleksowe mechanizmy umożliwiające programiście skupienie się na samym pisaniu gier zamiast zmuszać go do spędzania czasu na rozwiązywaniu problemów technicznych (DirectX).

Spis treści

Grafika

W bardziej rozbudowanych grach komputerowych za przetwarzanie grafiki odpowiada tzw. silnik graficzny. Można go podzielić na dwa podstawowe rodzaje: silnik 2D oraz silnik 3D. W pewnych przypadkach silnik 2D może prezentować ładniejszą grafikę niż silnik 3D, jednak wraz ze wzrostem możliwości kart graficznych w dziedzinie przetwarzania grafiki silnik 2D wychodzi z użycia. Ponadto aktualne możliwości techniczne sprawiają, że pisanie dedykowanych silników 2D wychodzi z użycia, w wielu przypadkach dużo lepszym rozwiązaniem wydaje się zaangażowanie podsystemu grafiki 3D do generowania grafiki dwuwymiarowej – osiąga się to poprzez ustawienie specjalnego trybu rzutowania zwanego ortogonalnym, oraz renderowanie na ekranie prostokątów z nałożonymi teksturami.

Silnik 2D

Silnik 2D tworzy scenę w grze zwykle poprzez nakładanie gotowych dwuwymiarowych obrazów w odpowiedniej kolejności. Czasem są one jeszcze modyfikowane, np. poprzez zmianę jasności, kolor-keying (maskowanie barw) albo przeźroczystości. Elementy sceny mogły zostać zbudowane przez twórców poprzez wyrenderowanie obiektów trójwymiarowych.

Silnik 2D to taki, który przetwarza zaledwie grafikę dwuwymiarową, jednak zwykle twórcom gier zależy, by utworzona w ten sposób scena sprawiała wrażenie trójwymiarowej. Przeważajaca ilość silników 2D wykorzystuje rzut izometryczny. Świat w ten sposób przedstawiony prezentuje się ładnie, wielokrotnie bardziej szczegółowo niż w przypadku grafiki 3D. Podstawową wadą tego typu wyświetlania grafiki jest niedobór perspektywy (obiekty, które w świecie gry posiadają sprawiać wrażenie bardziej oddalonych, są tej samej wielkości co obiekty bliższe).

Silniki 2D są zwykle proste w tworzeniu. Głównymi problemami podczas ich tworzenia jest określenie miejsca wyświetlania poszczególnych elementów sceny oraz kolejności ich wyświetlania. Łatwo jest także z góry określić, które elementy sceny nie są widoczne, bo np. leżą poza ekranem. Powoduje to, że optymalizacje silników 2D są proste. Podstawową wadą jest niedobór możliwości swobodnego obracania kamery w grze. Dotychczas silniki 2D były bardzo popularne w grach strategicznych, jednak wraz ze wzrostem jakości grafiki 3D zaprzestaje się tworzenia gier 2D.

Silnik 3D

Silnik 3D prowadzi do przygotowanie oraz wyrenderowanie sceny 3D. Grafika oparta na silniku 3D jest bardzo atrakcyjna dla gracza, jednak stworzenie dobrego silnika 3D jest niezwykle trudnym oraz pracochłonnym zajęciem. Sam rendering jest procesem tak skomplikowanym, że wszystkie wykonywane aktualnie gry wykorzystują gotowe biblioteki, jak np. DirectX czy OpenGL. Dzięki temu programista nie musi tworzyć kodu odpowiedzialnego za sam rendering oraz nie musi zagłębiać się w szczegóły działania kart graficznych.

Podstawowymi elementami, z których tworzony jest świat gry, są obiekty trójwymiarowe, zwykle wykonywane w programach takich jak 3D Studio, oraz tekstury nakładane na te obiekty. nieoczekiwanie tego we współczesnych grach są zróżnicowane efekty, jak np. światła, odblaski, cieniowanie, cząsteczki. Efekty te wpływają na realizm grafiki oraz na prędkość tworzenia poszczególnych klatek sceny. Z upływem lat w grach komputerowych efektów jest coraz więcej, co sprawia, że założenie silnika 3D staje się procesem coraz bardziej pracochłonnym. Wykonywanie takich efektów jak kurz, falowanie wody, refleksy świetlne, pochłania sporo pracy. Wymaga także wprowadzania coraz bardziej zaawansowanych technologii do kart graficznych, jak np. Vertex Shader oraz Pixel Shader.

Ograniczona prędkość przetwarzania grafiki sprawia, że twórcy gier poświęcają dużo czasu na optymalizację silników 3D. Jest to zagadnienie bardzo obszerne, np. jednym z najistotniejszym elementów optymalizacji jest określenie z góry, które elementy świata gry nie będą widoczne. Trudno jest określić np. czy dom, na który patrzymy, na pewno zasłania w całości dom znajdujący się dalej. W przypadku gier, w których gracz porusza się po pomieszczeniach przechodząc z pokoi do pokoi, wyznacza się je jako odseparowane elementy. Wszelkie miejsca, przez które jeden pokój bywa widziany z innego pokoju, wyznacza się mianem portali. Dzięki temu, jeśli gracz istnieje w którymś z pokoi, da się pominąć wyświetlanie innych pokoi, chyba że w zasięgu kamery istnieje portal. Ten sposób optymalizacji ma ogromny wpływ na szybkość działania gry. Jednym z prostszych sposobów optymalizacji, dzięki któremu da się zredukować ilość wyświetlanych elementów, jest mgła.

Kolejną optymalizacją jest wykonywanie tekstur o wielorakich wielkościach oraz nakładanie ich w zależności od odległości od kamery. Czasem stosuje się także obiekty o różnej liczbie wielokątów w zależności od odległości od kamery (Level Of Detail). O ile przeskalowanie tekstur jest proste, o tyle zmniejszenie ilości wielokątów w obiekcie 3D przy zachowaniu podobnego wyglądu z nałożoną teksturą jest bardzo trudne. W silnikach 3D stosuje się jeszcze cały szereg innych optymalizacji, jak np. renderowanie poniektórych elementów sceny rzadziej niż przy każdej następnej klatce itp.

Ciągły wzrost wydajności kart graficznych oraz nowe jednostki oraz funkcje sprawiają, że silnik 3D szybko staje się przestarzały. Równocześnie nakłady pracy podczas tworzenia nowego silnika są ogromne. Powoduje to, że przeważajaca ilość gier wykorzystuje z silników 3D innych producentów, zwłaszcza że są one dosyć uniwersalne oraz da się je stosować w wielorakich grach (w przeciwieństwie do systemu sztucznej inteligencji).

Rozwiązania nietypowe

Czasem stosuje się rozwiązania na pograniczu silnika 3D, próbując osiągnąć zadowalającą grafikę niskim kosztem oraz równocześnie szybko działającą. Takie rozwiązania da się znaleźć np. w grach GTA 2 oraz Diablo 2. W Diablo 2 umożliwiło to wykorzystanie tych samych grafik co w trybie 2D, jednak dzięki zastosowaniu renderingu możliwe było uzyskanie perspektywy. Rozwiązanie wykorzystane w grze polegało na tym, że w scenie 3D zamiast pełnych, trójwymiarowych obiektów w odpowiednich miejscach wyświetlane były dwuwymiarowe grafiki 2D zwrócone w stronę kamery. Jednak takie rozwiązanie sprawiało, że nie było możliwości obracania kamery. Gdyby była taka możliwość, całe "oszustwo" wyszło by na jaw oraz gracz zauważyłby, że wszystkie obiekty w grze są tak naprawdę płaskie.

Dźwięk

W przeciwieństwie do grafiki, dźwięk nie jest niezbędnym elementem gry, jednak wszystkie nowoczesne gry generują dźwięki. W większości gier w tle gra muzyka. Ma ona na celu wytworzenie klimatu oraz jest uzależniona od rodzaju gry. Kiedyś stosowało się dźwięki z głośniczka systemowego, później MIDI, jednak w obecnych grach wykorzystuje się częściej z innych formatów jak np. MP3/OGG. Utworzenie odpowiednich kompozycji zleca się zwykle zewnętrznym firmom, zespołom albo orkiestrom. W wielu grach muzyka zależy od tego, co aktualnie dzieje się w grze.

Poza muzyką w grze są wielokrotnie teksty mówione, co wymusza nagranie odpowiednich tekstów. Czasami na taką współpracę decydują się znani aktorzy, np. Cezary Pazura. nieoczekiwanie tego w grze jest wiele krótkich dźwięków, jak np. stąpnięcie po ziemi, przeładowanie broni itp. Tego typu dźwięki bywają wielokrotnie nagrane w formacie WAV.

Gra może obsługiwać dźwięki mono, stereo albo wielokanałowe. W zależności od tego, gdzie oraz w jakiej odległości dany dźwięk się pojawi, gracz usłyszy go z odpowiedniej strony oraz odpowiednio głośno. By nadać realizmu grze stosuje się czasem zróżnicowane inne efekty (np. pewne gry samochodowe symulują efekt Dopplera). Pomimo tego dźwięk jest jednym z prostszych zagadnień pojawiających się podczas tworzenia gier.

Sztuczna inteligencja

W grach komputerowych wielokrotnie są postacie kierowane przez sam komputer. Zwykle zamierzeniem autorów jest, by zachowanie takich postaci przypominało w możliwie jak największym stopniu zachowanie ludzkie. Ponadto algorytmy sztucznej inteligencji są ściśle uzależnione od rodzaju gry. Są całkowicie inne w przypadku gier samochodowych, gier typu FPS, czy gier strategicznych. W większości tych gier ukazuje się zagadnienie przemieszczania bota (czyli postaci kierowanej przez komputer) po świecie gry. Służą do tego specjalnie określone punkty w świecie oraz algorytmy wyszukiwania drogi, np. AStar. Zagadnienia związane z ruchem są obszerne oraz zależą w dużej mierze od rodzaju gry.

Zarządzanie zasobami

Współczesne gry wykorzystują ogromne ilości dodatkowych danych, takich jak tekstury, pliki dźwiękowe oraz muzyczne, pliki poziomów, modele postaci, pliki konfiguracyjne oraz skryptowe itp. Wielkość tych zasobów wielokrotnie liczy się w setkach megabajtów, logiczne jest więc, że przechowywanie ich wszystkich równocześnie w pamięci jest niemożliwe. Dlatego kolejnym ważnym aspektem programowania gier jest zaprojektowanie elastycznego, uniwersalnego oraz wydajnego zarządcy zasobów, który zautomatyzuje wczytywanie, zarządzanie priorytetami, używanie, zwalnianie oraz obsługę błędów wszystkich zasobów używanych przez grę.

Wiele gier komputerowych nie przechowuje swoich plików danych bezpośrednio na dysku, lecz stosuje technikę zwaną wirtualnym systemem plików, która opiera się na tym, że pliki zasobów są łączone w jeden wielki plik, z którego potrzebne zasoby są odczytywane na żądanie. Dzięki temu dużo trudniejsze staje się nielegalne użycie zasobów przez osoby trzecie, poza tym da się stosować inne techniki, np. kompresowanie czy szyfrowanie.

Sprawdź też

Linki zewnętrzne

vseo.pl