Rozpoczęcie pracy z 2d Game Dev (C ++): DirectX czy OpenGL? [Zamknięte]

12

Jestem studentem, który chce postawić stopę w progu rozwoju gry i chcę zrobić coś 2D, może tetris / kosmicznych najeźdźców / coś z klonem interakcji z małą myszką.

Skierowałem swoje poszukiwania w kierunku C ++ i 2d i ostatecznie doprowadziłem do DirectX / OpenGL

Teraz, jak rozumiem, wszystkie te pakiety zrobią dla mnie rysowanie rzeczy na ekranie. I to wszystko, na czym mi naprawdę zależy w tym momencie. Dźwięk nie jest konieczny. Prawdopodobnie wejście może być obsługiwane przez stdlib.

Tak więc, dla początkujących próbujących stworzyć podstawową grę w C ++, czy poleciłbyś DirectX lub OpenGL? Dlaczego? Jakie są kluczowe różnice między nimi? Który jest bardziej użyteczny?

Dfowj
źródło

Odpowiedzi:

16

Polecam SDL ( http://www.libsdl.org/ ) dla 2D, to tam zacząłem od grafiki i był dość łatwy w użyciu, mimo że wtedy ledwo znałem C ++.

To (lustro) jest zestawem samouczków, które zacząłem i które okazały się bardzo przydatne (były nieco przestarzałe nawet ~ 4 lata temu, kiedy je przepracowałem, ale nie sądzę, że SDL bardzo się zmieniło i powinny nadal być odpowiednie ).

SDL zajmuje się także obsługą wejść, a SDL_Mixer może wykonywać podstawowe audio.

Nigdy nie pracowałem z DirectDraw ani OpenGL dla rzeczy 2D, więc nie mogę tam komentować, ale zdecydowanie mogę polecić SDL.

Riley Adams
źródło
1
Uważam, że SDL jest dobry, ale bardzo trudno było uzyskać ścieżki i poprawnie skonfigurować.
Skeith,
1
Sprawdź także lazyfoo.net/SDL_tutorials, aby zapoznać się z kilkoma przyzwoitymi samouczkami (zawiera samouczki konfiguracji dla różnych IDE).
BeanBag
Uzgodniony z @Skeith. Nie mogę sobie wyobrazić problemów z konfiguracją SDL po raz pierwszy dla początkujących. Wystarczająco trudno jest poradzić sobie z niektórymi typowymi problemami z konfiguracją u amatorów, a nawet profesjonalistów. Po otrzymaniu konfiguracji SDL po raz pierwszy mogłem z łatwością uzyskać WSZYSTKO przez resztę życia. Tak wiele bólów głowy mi to dało; ile doświadczenia nauczyłem się o więcej niż jest to typowe dla zakładania biblioteki. To było zbyt dawno temu, aby przypomnieć sobie, co dokładnie sprawiło mi najwięcej problemów lub jakie miałem problemy, ale wszystkie inne biblioteki były łatwe do skonfigurowania.
Carter81
7

Użyłem zarówno SDL, jak i SFML do moich projektów gier. Użyłem SDL do ukończenia gry, gry tetris, i głównie używałem SFML jako warstwy okienkowej do eksperymentów z shaderem. Z mojego doświadczenia muszę powiedzieć, że SDL jest tym, co mówi. Jest to prosta warstwa bezpośrednich mediów, która wyodrębnia dane, z którymi współpracują Twoje media (dźwięk i wideo) do poziomu, z którym możesz wchodzić w interakcje na różnych platformach. To „wszystko”, co robi.

Z tego powodu zazwyczaj należy wymieszać go z kilkoma innymi bibliotekami, w szczególności z SDL_mixer, SDL_gfx i SDL_image, które zapewniają funkcjonalność potrzebną każdemu do tworzenia gier.

Wszystkie te biblioteki są również przeznaczone dla języka programowania C i są zgodne z jego konwencjami. Nie chodzi o to, że jest w tym coś złego, ale jeśli chcesz zorientowanego obiektowo podejścia do interakcji z io, w zasadzie musisz sam zbudować tę warstwę.

SFML zawiera wszystko od razu po wyjęciu z pudełka. Ma dźwięk, ma wideo, ma miksowanie, ma ograniczanie klatek i jest zorientowany obiektowo. Jeśli tego właśnie chcesz, polecam pójść na to. SFML ma również warstwę abstrakcji dla niektórych podstawowych funkcji OpenGL (w szczególności beginShape / EndShape i shaderów pikseli). Nie sądzę, że SDL ma coś takiego, tylko metodę łączenia się z tym.

PS Nie odrywaj konwersacji od C / C ++, ale jeśli nie używasz tego języka z jakiegoś konkretnego powodu i chcesz łatwiejszego, zawsze jest pygame. Który jest w zasadzie SDL + dla Pythona.

Robert Vella
źródło
2
SFML to także C ++, podczas gdy SDL to C. To robi różnicę, jeśli naprawdę chcesz nauczyć się C ++.
jsimmons,
5

http://www.gamedev.net/community/forums/mod/journal/journal.asp?jn=263140&reply_id=3598844

Zgadzam się z tymi uwagami i uważam, że to świetna dyskusja na temat tego, dlaczego DirectX jest lepszy niż OpenGL.

Ten dziennik jest odpowiedzią dla Davida z Wolfire.

Mam nadzieję, że to trochę zrównoważy to. ;)

Ale ogólnie, jeśli używasz międzyplatformowego frameworku API:

Użyj DirectX w systemie Windows i OpenGL w * nix.

jacmoe
źródło
Świetna lektura =) Co to za pole minowe ten temat ...
Nailer
6
404, nie znaleziono strony
axel22
Dostaję 404 na link archive.gamedev.net / ...
Exilyth,
4

http://blog.wolfire.com/2010/01/Why-you-should-use-OpenGL-and-not-DirectX

Zgadzam się z tymi uwagami i uważam, że to świetna dyskusja na temat tego, dlaczego OpenGL jest lepszy od DirectX.

Jednak to pytanie jest absolutnie kwestią opinii, a DirectX absolutnie ma swoje zalety w stosunku do OpenGL, szczególnie 10 i 11, a zwłaszcza w kontekście rozwoju gier.

Ponadto, jeśli zdecydujesz się na OpenGL, SDL jest wspaniałą i bardzo popularną biblioteką, i istnieje wiele zasobów do nauki OpenGL (NeHe itp.) - ale to może być miejsce na kolejne pytanie.

Ricket
źródło
1
Jako kontrapunkt do dyskusji na temat OGL kontra DX, faceci Unity wyraźnie zdecydowali się na DirectX w systemie Windows, ponieważ domyślne sterowniki OpenGL dla większości kart wideo są tak złe. Nie mam przed sobą referencji, ale na jednej z ich konferencji powiedzieli coś podobnego do sterowników OGL, które są ich największym problemem w systemie Windows. Na szczęście ich warstwa abstrakcji oznacza, że ​​tak naprawdę nie obchodzi cię to z perspektywy użytkownika.
Tetrad
Tworzymy zorientowane na biznes oprogramowanie do wizualizacji zarówno dla systemu Unix, jak i Windows, i mogę potwierdzić, że większość problemów, które widzimy w systemie Windows, dotyczy sterownika OpenGL.
drxzcl,
1

Jeśli dopiero zaczynasz, prawdopodobnie lepiej jest użyć istniejącego silnika lub frameworka 2D, takiego jak SFML .

DrDeth
źródło
1

Lubię Direct X i używam go od kilku lat w wielu projektach, ale jeśli się uczysz, uważaj na problemy z wersją.

Odkryłem, że większość bezpośredniego kodu x nie będzie się kompilować w innej wersji i może to być piekło, jeśli próbujesz wykonać samouczek.

Polecam Direct X, ponieważ istnieją funkcje dla wszystkich, które ułatwiają, gdy zaczynasz od początku, a następnie bardziej zaawansowane sposoby manipulowania rzeczami w miarę postępu.

Skeith
źródło
1

Silnik gry Haafa

Nie wiem, jak to jest aktualne (mam na myśli, że tak nie jest, ale nie sądzę, żeby istniał jakiś powód, dla którego nie powinien być użyteczny), ale użyłem go jakiś czas temu (C ++) i naprawdę podobało mi się to. HGE nie był aktualizowany od 05.08, ale znowu pamiętam, że jest dość prosty do nauczenia się i szybki. Jest również wyposażony w różnego rodzaju narzędzia i pomocnika, takie jak układ cząsteczkowy.

W każdym razie, jeśli chcesz stworzyć rzeczywistą grę, w przeciwieństwie do uczenia się rzeczy, które dzieją się „pod maską” w procesie rysowania i tak dalej, zaleciłbym użycie czegoś wyższego niż OpenGL lub DirectX, lub spędzasz czas rysując rzeczy na ekranie zamiast tworzyć rzeczywistą grę. A HGE jest zdecydowanie warte sprawdzenia.

http://hge.relishgames.com/

Zaky German
źródło
0

Jestem w tej samej pozycji, co ty, dopiero kilka miesięcy temu zacząłem pracować nad tworzeniem gier (na platformie iPhone). Pochodząc z tła C, sugerowałbym użycie frameworka (szczególnie Cocos2d).

Zalety frameworka są więcej niż omówione w tym poście - ale głównie obsługuje większość procesów niskiego poziomu w OpenGL i zapewnia metody radzenia sobie z tym, czego najprawdopodobniej będziesz potrzebować dla twórców gier. Mają świetną społeczność, są open source, a więc jeśli potrzebujesz dostępu do podstawowego kodu frameworka / zmodyfikować dowolny jego fragment, aby dostosować go do swoich potrzeb / w razie potrzeby przejść do niskiego poziomu OpenGL - nadal masz wybór.

Możesz iść drogą bezpośredniego OpenGL, ale dla mnie to po prostu przesada.

Najprawdopodobniej będziesz chciał zajrzeć do różnych istniejących bibliotek fizycznych - Google Chipmunk i Box2D, aby uzyskać więcej informacji.

Twoje zdrowie!

Salman
źródło
1
+1 za nie zasługujący na -2. Zbyt wiele trolli na tej stronie daje negatywy bez powodu. Szczerze mówiąc, nawet nie rozumiem, dlaczego pozwalają nawet pokazywać coś poniżej 0. Jest tak idiotyczny jak youtube, umożliwiając downvoting.
Carter81