C++ w programowaniu gier. Adam Sawicki - www.asawicki.info - 30 października 2010



Podobne dokumenty
Pisząc kod natywny C/C++, czyli nie taki diabeł straszny. Adam Sawicki

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

6. Algorytmy ochrony przed zagłodzeniem dla systemów Linux i Windows NT.

Praktyczne zastosowanie bibliotek Boost oraz nowego standardu C++11

Zaawansowane programowanie w języku C++

Czym jest Java? Rozumiana jako środowisko do uruchamiania programów Platforma software owa

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

Od uczestników szkolenia wymagana jest umiejętność programowania w języku C oraz podstawowa znajomość obsługi systemu Windows.

Podstawy programowania. Wprowadzenie

Spis treści. I. Skuteczne. Od autora... Obliczenia inżynierskie i naukowe... Ostrzeżenia...XVII

Java w 21 dni / Rogers Cadenhead. Gliwice, cop Spis treści. O autorze 11. Wprowadzenie 13 TYDZIEŃ I JĘZYK JAVA

Java - wprowadzenie. Programowanie Obiektowe Mateusz Cicheński

Zacznij Tu! Poznaj Microsoft Visual Basic. Michael Halvorson. Przekład: Joanna Zatorska

Krótka Historia. Co to jest NetBeans? Historia. NetBeans Platform NetBeans IDE NetBeans Mobility Pack Zintegrowane moduły. Paczki do NetBeans.

Środowisko Keil. Spis treści. Krzysztof Świentek. Systemy wbudowane. 1 Trochę teorii. 2 Keil

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ),

Programowanie aplikacji na iphone. Wstęp do platformy ios. Łukasz Zieliński

C# 6.0 : kompletny przewodnik dla praktyków / Mark Michaelis, Eric Lippert. Gliwice, cop Spis treści

Spis treści. Wprowadzenie 15

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Programowanie obiektowe. Materiały przygotował: mgr inż. Wojciech Frohmberg

Programowanie dla początkujących w 24 godziny / Greg Perry, Dean Miller. Gliwice, cop Spis treści

MonoGame. Wieloplatformowe gry w C# Mateusz Cicheński

INFORMATYKA, TECHNOLOGIA INFORMACYJNA ORAZ INFORMATYKA W LOGISTYCE

Programowanie obiektowe

Programowanie równoległe i rozproszone. Praca zbiorowa pod redakcją Andrzeja Karbowskiego i Ewy Niewiadomskiej-Szynkiewicz

Politechnika Krakowska im. Tadeusza Kościuszki. Karta przedmiotu. obowiązuje w roku akademickim 2012/2013. Przedmioty kierunkowe

Wstęp do programowania

Politechnika Krakowska im. Tadeusza Kościuszki. Karta przedmiotu. obowiązuje studentów rozpoczynających studia w roku akademickim 2012/2013

1 Podstawy c++ w pigułce.

Zaliczenie przedmiotu:

Obiektowy model dokumentu. Katedra Mikroelektroniki i Technik Informatycznych

WYKŁAD. Jednostka prowadząca: Wydział Techniczny. Kierunek studiów: Elektronika i telekomunikacja. Nazwa przedmiotu: Język programowania C++

Środowiska i platformy programistyczne

IdyllaOS. Prosty, alternatywny system operacyjny. Autor: Grzegorz Gliński. Kontakt:

Programowanie Komponentowe WebAPI

KARTA KURSU. Programowanie obiektowe

Programowanie obiektowe Object programming. Elektrotechnika II stopień (I stopień / II stopień) Ogólno akademicki (ogólno akademicki / praktyczny)

INŻYNIERIA OPROGRAMOWANIA

Wprowadzenie do programowania

Od uczestników szkolenia wymagana jest umiejętność programowania w języku C oraz podstawowa znajomość obsługi systemu Linux.

PhysX Visual Debugger. Tomasz Gańko

Programowanie MorphX Ax

Programowanie RAD Delphi

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec

Dobry start do profesjonalnego programowania w C++ dla. początkujących programistów

Wiadomości wstępne Środowisko programistyczne Najważniejsze różnice C/C++ vs Java

Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni. Wykład 5. Karol Tarnowski A-1 p.

Elektrotechnika I stopień (I stopień / II stopień) Ogólno akademicki (ogólno akademicki / praktyczny) Kierunkowy (podstawowy / kierunkowy / inny HES)

Programowanie obiektowe - 1.

KARTA KURSU. Student zna podstawy analizy, projektowania i programowani obiektowego oraz podstawy języka C++.

Program szkolenia: Zaawansowane programowanie w C++

Wykład 1. Program przedmiotu. Programowanie Obiektowe (język C++) Literatura. Program przedmiotu c.d.:

Język C++ Różnice między C a C++

Zaawansowane programowanie w języku C++ Klasy w C++

Przetwarzanie wielowątkowe przetwarzanie współbieżne. Krzysztof Banaś Obliczenia równoległe 1

Zadanie polega na stworzeniu bazy danych w pamięci zapewniającej efektywny dostęp do danych baza osób.

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 5. Karol Tarnowski A-1 p.

dr inż. Jarosław Forenc

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Historia modeli programowania

Spis treści. Rozdział 1. Aplikacje konsoli w stylu ANSI C i podstawowe operacje w Visual C

Podstawy programowania

Uniwersytet Łódzki Wydział Matematyki i Informatyki, Katedra Analizy Nieliniowej. Wstęp. Programowanie w Javie 2. mgr inż.

PRZYJĘTE ZASADY GRY...3 ZAŁOŻENIA PROJEKTU...4 CZYM JEST I DLACZEGO QT?...5 DIAGRAM KLAS...7 DIAGRAM GRY SINGLE PLAYER...8 DIAGRAM MULTIPLAYERA...

PRYWATNA WYŻSZA SZKOŁA BUSINESSU, ADMINISTRACJI I TECHNIK KOMPUTEROWYCH S Y L A B U S

Wykład Ćwiczenia Laboratorium Projekt Seminarium

Wykład V. Rzut okiem na języki programowania. Studia Podyplomowe INFORMATYKA Podstawy Informatyki

5. Model komunikujących się procesów, komunikaty

Moc płynąca z kart graficznych

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Tworzenie oprogramowania

Obliczenia równoległe i rozproszone. Praca zbiorowa pod redakcją Andrzeja Karbowskiego i Ewy Niewiadomskiej-Szynkiewicz

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk

STL: Lekcja 1&2. Filozofia STL

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

Wzorce projektowe i refaktoryzacja

Wykład 9: Polimorfizm i klasy wirtualne

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

Myśl w języku Python! : nauka programowania / Allen B. Downey. Gliwice, cop Spis treści

Instrukcja do pracowni specjalistycznej z przedmiotu. Obiektowe programowanie aplikacji

Wykład 1. Program przedmiotu. Programowanie (język C++) Literatura. Program przedmiotu c.d.:

Zajęcia nr 1 Podstawy programowania. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

KARTA KURSU (realizowanego w module specjalności)

PRYWATNA WYŻSZA SZKOŁA BUSINESSU, ADMINISTRACJI I TECHNIK KOMPUTEROWYCH S Y L A B U S

Podstawy programowania wykład

Król Łukasz Nr albumu:

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

Biorąc udział w projekcie, możesz wybrać jedną z 8 bezpłatnych ścieżek egzaminacyjnych:

Podstawy programowania obiektowego

TESTOWAĆ TESTOWAĆ TESTOWAĆ TESTOWAĆ TESTOWAĆ TESTOWAĆ TESTOWAĆ

Księgarnia PWN: Włodzimierz Stanisławski, Damian Raczyński - Programowanie systemowe mikroprocesorów rodziny x86

Język JAVA podstawy. wykład 1, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec

Język programowania C C Programming Language. ogólnoakademicki

Komputery przemysłowe i systemy wbudowane

KARTA PRZEDMIOTU. Egzamin / zaliczenie. Egzamin / zaliczenie. ocenę*

Lab 9 Podstawy Programowania

Problem Próby rozwiązania Maszyna stanów Inne zastosowania Podsumowanie. Maszyny stanów. Programowanie gier bez Unity, cz. 3.

Transkrypt:

C++ w programowaniu gier Adam Sawicki - www.asawicki.info - 30 października 2010

Dlaczego C++? W jakim języku pisze się gry? Poważne tytuły na PC i konsole - tylko C++! Inne platformy różnie iphone, ipad Objective C (oraz C++) Android Java (oraz C++) Web ActionScript (Flash), JavaScript, Amatorskie projekty dowolnie XNA, Java, Python, cokolwiek 2

Dlaczego C++? C++ to nie najważniejszy język na świecie. TIOBE Programming Community Index for October 2010 [TIOBE] 3

Dlaczego C++? C++ nie jest idealny [C++FQA] Jest trudny i obszerny Np. wskaźniki, szablony, przeciążenia Wiele rzeczy nieustandaryzowane Np. stringi, kontenery, obsługa błędów, brak ABI Uboga biblioteka standardowa Niski poziom Potrzeba dużo kodu, żeby cokolwiek napisać Łatwo o różnorodne błędy, np. w zarządzaniu pamięcią 4

Dlaczego C++? Jednak C++ to najlepszy/jedyny wybór do gier Dostatecznie wysoki poziom, by pisać złożone programy Np. programowanie obiektowe Dostatecznie niski poziom, by pisać wydajny kod Np. wskaźniki, brak wirtualnej maszyny, ręczne zarządzanie pamięcią Jest szeroko wspieranym standardem API, biblioteki i silniki do gier mają zwykle interfejs do C/C++ Istnieją kompilatory na interesujące nas platformy PC/Windows, Xbox 360, PlayStation 3 5

Nie kombinuj W programowaniu gier chodzi o to, żeby napisać grę Warto pisać wszystko jak najprościej Dlatego nie kombinuj! Nie musisz być mistrzem inżynierii oprogramowania Nie powinieneś przekombinować z programowaniem obiektowym i wzorcami projektowymi Nie musisz znać na pamięć standardu C++ Nie powinieneś przekombinować z preprocesorem, szablonami i przeciążaniem operatorów 6

C++ a programowanie gier Programowanie gier dopiero zaczyna się tam, gdzie kończy się nauka C++ Problem z konstruktorem klasy? Zrobić metodę Init! Problem z const correctness? Immutability, koncepcja deskryptora. Problem z singletonem? Jawnie inicjalizować i finalizować podsystemy! Za dużo getterów i setterów? Pisać struktury, pola publiczne! Wiele zagadnień typowych w programowaniu gier [GPPATTERNS] Np. podwójne buforowanie, architektura komponentowa, pula obieków 7

Data-Driven "Boss": { "Life": 1000, "Armor": 200, "Weapon": "Laser" }, "Laser": { "ParticleEffect": "LaserEffect02", "Damage": 1000, "Duration": 2.5, "Cooldown": 0.7 } 8

Optymalizacja Optymalizacja co w praktyce oznacza? Jednym kojarzy się z doborem algorytmu o dobrej złożoności asymptotycznej Innym kojarzy się z przepisaniem algorytmu na asembler Prawda leży pośrodku! Duże obiekty przekazywać i zwracać przez wskaźnik lub referencję, nie przez wartość Upraszczać obliczenia matematyczne, mnożyć zamiast dzielić Nie definiować złożonych zmiennych wewnątrz pętli Nie ufać optymalizacji kompilatora 9

Wydajność Dodawanie, odejmowanie, mnożenie Dzielenie, funkcje transcendentalne Branching, metody wirtualne, skok pod wskaźnik Dynamiczna alokacja pamięci Zasoby systemowe tekstury, wątki, gniazda Wejście-wyjście pliki, sieć 10

Optymalizacja Nietrafienie w pamięć podręczną cache miss 1980: Odwołanie do pamięci RAM 1 cykl procesora 2009: Odwołanie do pamięci RAM 400 cykli procesora [POOP] 11

Optymalizacja Lokalność odwołań ważniejsza, niż ilość obliczeń Programowanie obiektowe Programowanie zorientowane na dane Obiekty alokowane osobno, rozrzucone po pamięci Obiekty w tablicy, w ciągłym obszarze pamięci Pakowanie danych short, char Flagi bitowe Pola bitowe Nawet zmiana kolejności pól może wpłynąć na wydajność! 12

Najlepsza optymalizacja Najszybszy kod to taki, który nigdy się nie wykonuje Precalc przygotować dane wcześniej, nie liczyć za każdym razem Podczas wczytywania gry NIE parsować plików tekstowych, XML, modeli OBJ, tekstur PNG, nie kompilować shaderów Edytor lub inne narzędzia powinny przygotować assety w docelowym formacie: modele do wczytania prosto do VB/VBO, tekstury w DDS (ewentualnie JPEG), własne formaty plików, VFS Podczas działania gry NIE liczyć w każdej klatce tego, co można przygotować raz lub policzyć raz na jakiś czas (np. w AI) Stosować culling i podział przestrzeni, aby nie przetwarzać tego, czego nie widać lub co nie jest istotne LOD Level od Detail kiedy mimo wszystko trzeba przetwarzać dużo danych, można mniej szczegółowo 13

Wyjątki W kodzie poważnej gry wyjątki powinny być nieużywane, a ich obsługa wyłączona Brak standardowego sposobu obsługi błędów w C++ Niedoskonałość wyjątków C++ - brak finally, RAII nie jest powszechne Pojęcie błędu w grze nie ma takiego sensu jak w programie Włączone wsparcie dla wyjątków w kompilatorze C++ to duża strata wydajności, nawet kiedy wyjątki nie są faktycznie używane Kompilatory C++ na konsolach nie wspierają wyjątków [KosztWyjątków] 14

STL STL-a też często nie używa się w programowaniu gier Wprawdzie warto mieć szablony kontenerów i mogą działać wydajnie, jednak STL robi zbyt dużo dynamicznych alokacji pamięci. Stringów używać tylko do pokazywania tekstu użytkownikowi, nie wewnętrznie w kodzie gry Unikać std::list, std::set, std::map, najlepszy jest std::vector EASTL implementacja STL dostosowana do programowania gier [EASTL], udostępniona ostatnio za darmo [EASTL/GIT] 15

Programowanie równoległe To dziedzina obszerna, trudna, wciąż dojrzewająca, ale bardzo ważna, opłacalna i już obowiązkowa! Wątki i muteksy to dopiero początek 16

Narzędzia Jedyna słuszna platforma: Windows :) Jedyne słuszne IDE: Visual C++ :) Narzędzia pomocnicze: Śledzenie wycieków pamięci: własny alokator pamięci, Visual Leak Detector Profilowanie: własna instrumentacja, Very Sleepy, AMD CodeAnalyst, Intel Vtune Debugowanie bibliotek: Debug version of Direct3D, PIX, PhysX Visual Debugger Statyczna analiza kodu: CppCheck 17

Bibliografia [TIOBE] TIOBE Programming Community Index for October 2010 http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html [C++FQA] C++ FQA, Yossi Kreinin http://yosefk.com/c++fqa/ [GPPATTERNS] Game Programming Patterns, Robert Nystrom http://gameprogrammingpatterns.com/ [POOP] Pitfalls of Object Oriented Programming, Tony Albrecht (Sony Computer Entertainment Europe) http://bit.ly/90fcde [KosztWyjątków] Koszt wyjątków, forum.gamedev.pl http://forum.gamedev.pl/index.php/topic,19151.msg229335.html#msg229335 [EASTL] EASTL -- Electronic Arts Standard Template Library http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2271.html [EASTL/GIT] paulhodge / EASTL http://github.com/paulhodge/eastl 18