Jak zacząć tworzenie gier?

0

Hej, jako tako znam C++, wiadomo nie mam się za nie wiadomo kogo, ale początkującym też raczej nie jestem. Z tym że dotąd pisałem głównie konsolowe aplikacje. Z tym że chciałbym zajmować się robieniem gier. I tutaj mam klika pytań.
Jak się zabrać za naukę tworzenia gier w C++? Lepiej zaczynać od 2D czy od razu 3D? Jaką bibliotekę do tego wybrać? Myślałem OpenGL.
I wreszcie najważniejsze, czy możecie mi polecić jakiś dobry kurs? Najlepiej po polsku, ale z angielskim też dam sobie radę.

5

zacznij od matematyki
pozniej doszlifuj c++
pozniej 2d bez fizyki
pozniej 2d z fizyka
pozniej "proste" 3d (np unity)
pozniej juz mozesz bawic sie w opengl

moim zdaniem tak bedzie najprosciej, nie zostaniesz rzucony na tak strasznie glebowa wode. Ja kiedys robilem cos tam w sdlu w c++
http://lazyfoo.net/SDL_tutorials/

3

Do tego co napisał fasadin dodałbym jeszcze:

  • nauczenie się tworzenia grafiki i animacji 2D
  • następnie modelowanie i teksturowanie obiektów 3D
0

Z matematyką nie będzie problemu, z C++ też. A moglibyście mi podesłać coś dobrego na temat tworzenia grafiki 2D?

0

I tak btw jest już nowa wersja tego tutka http://lazyfoo.net/tutorials/SDL/index.php

7

Jeżeli jeszcze nie miałeś styczności z programowaniem gier to moja rada abyś zaczął od grafiki 2D. W dwuwymiarowych grach będziesz mógł się skoncentrować na głównych elementach funkcjonowania gry:

  • logika gry
  • prosta fizyka
  • zarządzanie zasobami
  • zarządzanie czasem, w tym regulacja fps
  • podział struktury gry na główne moduły
  • algorytmy często wykorzystywane w grach np. pathfinding, stosowanie filtrów na teksturach np. gaussian blur (to wszystko oczywiście w zależności od skali projektu)
  • detekcją kolizji
  • sztucznej inteligencji
  • itd.

Gry 3D na sam początek to IMHO zły wybór. Zbyt wiele rzeczy naraz będziesz musiał ogarniać, by w ogóle cokolwiek zacząć konstruktywnego tworzyć. Nawet nie zdążysz napisać swojej pierwszej gry a możesz już popaść w "silnikologię" - czyli zamiast pisać grę zaczniesz pisać silnik, na którym spędzisz bardzo dużo czasu, nota bene zdobywając przy tym bardzo dużo umiejętności. Bardzo wysoce prawdopodobne że nigdy tego silnika nie skończysz. Inną opcją jest skorzystanie już z gotowych darmowych silników, które zdecydowanie ułatwią Ci życie. Dzięki silnikom skoncentrujesz się na pisaniu rzeczywistej gry i powiązanej z nią mechanikami. Samemu nie zaczynałem od pisania o gotowe silniki, więc nie mogę powiedzieć ile to przynosi relatywnych korzyści przy nauce pisania gier i programowaniu grafiki.

W przypadku gier 2D możesz skorzystać z SDL'a, SFML'a lub Allegro (te trzy liby są chyba najbardziej popularne)
SDL jest napisany w C, znaczy że możesz zapomnieć o klasach, polimorfizmie itd. Wersja 1.2 ma to do siebie że nie obsługuje sprzętowej akceleracji działania na teksturach. Dopiero w najnowszej wersji 2.0 udostępnili taką możliwość, przez konwersję powierzchni SDL_Surface na tekstury SDL_Texture. Nowsza wersja udostępnia również możliwość rotacji i skalowania tekstur. We wcześniejszej wersji byłeś skazany na SDL_gfx - rozszerzenie to umożliwiało m.in. rotację tekstur (kiepsko z wydajnością - trzeba stosować pewne sztuczki) i tworzenie prostych kształtów.
SFML to już typowa obiektówka, polimorfizm, szablony i wszystko co znane i lubiane w C++.
Oba wyżej wymienione liby obsługują również OpenGL. Wydaje mi się to świetnym rozwiązaniem dla osoby, która dopiero zaczyna się bawić w pisanie gier - nie jesteś rzucony na głęboką wodę, a gdy będziesz chciał powiększyć możliwości możesz wykorzystać dobrodziejstwa OGL'a.

API do tworzenia grafiki 3D; masz dwa wybory: OpenGL i cieszysz się cross-platformowością lub DirectX. Oba liby udostępniają również możliwość generowania grafiki 2D. Z tego co mi wiadomo to niewiele różnią się od siebie w kwestii możliwości, poza tym że DirectX to cały pakiet (przetwarzanie grafiki i dźwięku, obsługa klawiatury, obsługa protokołów internetowych itd.), natomiast OGL to sama grafika - do całej reszty wspomożesz się np. SDL'em lub GLut'em, albo Direct'em jeżeli nie zależy Ci na multiplatformowości. Moim zdaniem za OGL'em przemawia licencja, multiplatformowość i takie osoby jak np. Carmack, który wspiera wolne oprogramowanie - źródła z wielu silników id software zostały upublicznione :]

Tworzenie gier w 3D ma to do siebie że musisz wiedzieć o:

  • graphic pipeline, tutaj również o scenie, oświetleniu itd.
  • skalarach, wektorach, punktach, macierzach
  • itp.

Koncentrując się na początku na grach w drugim wymiarze zawsze możesz z biegiem czasu/nauki stosować podejścia:

  • matematyczne: wektory, macierze, obliczanie kątów, całkowanie ruchu
  • algorytmiczne: kompresja danych, wyszukiwanie najkrótszej drogi, sztuczna inteligencja
  • fizyczne: model zderzeń ciał sztywnych i materialnych, prędkość i przyspieszenie, siła, kinetyka i kinematyka, wyliczanie trajektorii itd.

Zapewne wiele nie dopisałem, lub napisałem za dużo, ale mam nadzieję że się przyda :]

0

No dzięki :)
Chyba jednak wezmę się SFML, bo już kiedyś coś w niej robiłem.
Prosiłbym jeszcze o jakiś dobry tutorial nt tworzenia grafiki pod gry 2D, najlepiej do podstaw, bo jestem mega antytalentem plastycznym.

1

http://2dgameartforprogrammers.blogspot.com/

W google szukaj "Pixel art tutorial" a znajdziesz na przykład coś takiego: http://www.hongkiat.com/blog/pixel-art-tutorials/
Poza tym, jeżeli nie masz czasu i talentu artystycznego, zawsze możesz skorzystać z darmowych grafik, udostępnianych na odpowiedniej licencji - wystarczy poszukać.

1

Ja ze swojej strony również polecam SFMLa, bo dzięki tej bibliotece udało mi się w miarę bezkonfliktowy sposób wkręcić się w tworzenie gier. Obiektówka, bardzo intuicyjne nazwy funkcji, duża pomoc na forum SFMLa. Nawet sam autor biblioteki często odpowiada. Robiłem grę na projekt na programowanie na uczelni właśnie w SFMLu i dzięki temu się zakochałem w tej bibliotece.

Co do grafiki, rysowania to ja uważam, że nie ma czegoś takiego jak antytalent. Bierz kartke, ołówek bądź długopis (to jest ważne, żeby od tego zacząć, a nie od razu skakać po tablet) i rysuj. Cokolwiek. Narysuj sobie koślawego rycerza z mieczem, drzewa i jakiś domek, możesz wziąć zdjęcie kogoś i spróbować go narysować, postaw sobie jakiś prosty element przed sobą i go narysuj, nie wiem szklankę, książkę..

Choć sam od siebie najbardziej proponuje rysowanie z wyobraźni, choćby to miało być nierelistyczne, ważne żeby wypracować swój styl, pobudzić wyobraźnie. Takie gry jak Plants vs Zombies, Angry Birds czy Super Meat Boy. To jest wszystko bardzo przyjemne dla oka, a na prawdę to nie są jakieś szczyty rysunku. Nie trzeba hiperrealistycznie rysować, znać zasad perspektywy, etc. żeby móc tworzyć ładna grafikę do gier tego typu. Oczywiście to wszystkie się może bardzo przydać i wzbogacić tą grafikę. Ale najgorsze co chyba może być to rysownik, który namaluje Ci wszystko piksel po pikselu tak samo jak jest na zdjęciu, a jak ktoś mu powie, żeby narysował coś z wyobraźni to spojrzy na niego jak na debila.

Ja miałem trochę łatwiej, bo najpierw rysowałem, a dopiero potem zacząłem programować, więc mogłem się głównie skupić na nauce SFMLa (czy teraz Unity), a grafikę sobie tam spokojnie dorabiałem do kodu. Ale jak już trochę porysujesz to możesz kupić sobie tablet, mozesz skorzystać z tego linka co kolega wyżej wysłał, bo jest całkiem konkretny i rysować już sobie coś pod daną grę. Nawet jak nie wyjdzie super to przecież po czasie będziesz mógł zmienić tego sprite'a na lepszego.

1 użytkowników online, w tym zalogowanych: 0, gości: 1