Ten artykuł został stworzony dla starszych wersji GameMakera i może nie być aktualny.

C++ Programowanie Gier - Część 1

Niedziela, 22 Listopada 2009, 00:52
Czas czytania 0 minut, 21 sekund
Jest to część pierwsza poradnika odnośnie pisania gier w języku C++.
W części pierwszej dowiemy się rzeczy teorii ogólnej, poznamy strukturę gry. Kolejne części planuję wydawać co tydzień lub dwa.
Poradnik jest w formacie PDF więc zapraszam do obejrzenia/pobrania go tutaj:
C++ Programowanie Gier - Część 1.pdf
Mam nadzieję, że przyda się nie jednej osobie i czegoś nowego się z tego poradnika dowiedzą :)
Projekt Visual C++ z kodem źródłowym lekcji znajdziecie tutaj:
ProtoGame1.zip
Komentarze (łącznie 37, wyświetlam 1 - 15):
S
Snake (Nie., 22 Lis. 09, 10:27)
#1

"Procedura ta musi być statyczna, po to byśmy mogli użyć jej przy opisywaniu klasy okna (chodzi o przypisywania wskaźnika na nią, co jest niemożliwe/problematyczne, gdy nie jest statyczna)"
Jest możliwe. Bardziej chodzi o to, że parametry funkcji nie będą się zgadzać (metody niestatyczne mają dodatkowy, niejawny parametr - wskaźnik "this" ), co prawdopodobnie skończyło by się crashem, gdyby posłużyła jako callback.
Co do wywoływania scen ze wskaźnika na funkcje... nie lepiej by było użyć polimorfizmu ?
I nie lepiej byłoby zamiast tego "while ( wykonuj == true )" zrobić pętlę nieskończoną i używać break do przerwania ? No chyba, że z jakiegoś powodu pętla musi być wykonywana do końca ;p

Art w sumie może być, na pewno komuś się przydadzą zawarte w nim informacje - dobra robota! :P

HuderLord (Nie., 22 Lis. 09, 11:43)
#2

Wiele rzeczy trzeba samemu sie domyślać. Bo te funkcje z winAPI słabo wytłumaczyłeś np:
MSG msg; // ostatni komunikat
HWND hwnd; // uchwyt okna
WNDCLASS wndc; // klasa okna
dlaczego taki jest zapis? co to jest MSG a msg/ HWND a hwnd itd.
domyślam się że to deklaracja zmiennych ale w takim razie skąd takie dziwne typy się biorą?

i dlaczego w funkcji poniżej odwołuje się do nich poprzedzając znakiem "&"
PeekMessage( &msg,[...] )

Will (Nie., 22 Lis. 09, 12:11)
#3

Ogólnie nie jest najgorzej. Taki artykuł trzeba skonsultować najpierw z kilkoma docelowymi czytelnikami. Jeśli już nie tworzy się kodu zgodnego z zasadami programowania obiektowego należy napisać, że jest to szkielet tylko poglądowy i czytelnik nie powinien używać go w większych projektach. Również używanie określeń w stylu: alarm, scena(a raczej jej wytłumaczenie)czy aktor nie jest dobrym pomysłem jeśli nie napiszesz, że jest to nazewnictwo używane przez Ciebie. Moim zdaniem powinieneś na początku przedstawić strukturę gry dla dużego projektu tak dla poinformowania, że czytający nauczą się tworzyć prosty szkielet dla bardzo prostych gier.

Tymon (Nie., 22 Lis. 09, 12:50)
#4

10 minut. :)

ZeroXbot (Nie., 22 Lis. 09, 13:23)
#5

No nareszcie dowiedziałem się o co chodzi z tymi kontenerami :P Prócz tego, to większość wiedziałem (główna pętla itp.) z tutoriali do SDL-a. Pozatym do eventów klawiatury czy myszki są odpowiednie funkcje w tej bibliotece (SDL) i ich używam. Z czego mam więc się uczyć korzystać?

HuderLord (Nie., 22 Lis. 09, 14:34)
#6

to wytłumaczy mi ktoś skąd się wzięły te typy: MSG HWND WNDCLASS jakie wartości przyjmują?

S
Snake (Nie., 22 Lis. 09, 14:40)
#7

Poczytaj o podstawach WinAPI: xion.org.pl/.../3_1.html albo darkcult.gamedev.pl/kursy/api1.html
BTW. W artykule należało by wspomnieć o tym, że wymagane są podstawy albo napisać więcej o programowaniu z użyciem WinAPI.

Roki (Nie., 22 Lis. 09, 15:17)
#8

Pobrałem kod, wrzucilem na Dev C++, a tu:

Kompilator: Default compiler
Wykonywanie g++.exe...
g++.exe "C:UsersPrzemekDesktopprotogame1main.cpp" -o "C:UsersPrzemekDesktopprotogame1main.exe" -I"C:AplikacjeDev-Cpplibgccmingw323.4.2include" -I"C:AplikacjeDev-Cppincludec++3.4.2backward" -I"C:AplikacjeDev-Cppincludec++3.4.2mingw32" -I"C:AplikacjeDev-Cppincludec++3.4.2" -I"C:AplikacjeDev-Cppinclude" -L"C:AplikacjeDev-Cpplib"
C:UsersPrzemekDesktopprotogame1main.cpp: In constructor `CInterface::CInterface()':
C:UsersPrzemekDesktopprotogame1main.cpp:34: error: `strcpy_s' undeclared (first use this function)
C:UsersPrzemekDesktopprotogame1main.cpp:34: error: (Each undeclared identifier is reported only once for each function it appears in.)

Wykonanie zakończone


Przy kompilacji :(

P
PsichiX (Nie., 22 Lis. 09, 15:40)
#9

Roki: Bo na końcu napisałem że to jest projekt Visual C++ a nie Dev C++ :P nie skompilujesz bez podmiany pewnych funkcji. Tak więc radzę porzucić deva ;)
Dzięki za krytykę, zawsze to drogowskaz. No i w sumie kolejne części będę konsultował z kilkoma osobami obeznanymi w temacie :)

Roki (Nie., 22 Lis. 09, 15:50)
#10

Fajnie, no to chyba se skombinuje Visuala :P
A tak ogólnie to tutorial miły, bardzo przydatny :D

koko123 (Pon., 23 Lis. 09, 18:39)
#11

Dlaczego 'X' nie działa? ;p

P
PsichiX (Pon., 23 Lis. 09, 18:45)
#12

mi dziala :0

gnysek (Pon., 23 Lis. 09, 21:01)
#13

@PsichiX: wiesz, artykuły można zawsze poprawiać. To nawet wskazane, bo zawsze za rok, za dwa umiesz coś więcej :)

Crack (Pon., 23 Lis. 09, 21:29)
#14

Fajne ;) postarałeś się, naprawdę.
Wszystko ładnie i bardzo dobrze, że cały kod jest w jednym pliku źródłowym, niektórzy mogliby się nie połapać ;)

XxMichałxX (Pią., 27 Lis. 09, 15:34)
#15

ja przeczytałem i rezygnuje z robienia gier w c++ jak narazie, jestem jeszcze za głupi żeby to wszystko obczaić ;d ogólnie dla mnie to idiotyzm z tymi wszystkimi funkcjami, jakby poprostu nie mogło być tak łatwo jak w gm, to nie kurcze int main, include, 50 razy wszystko inicjowac trzeba, jakieś chore nazwy..

Najnowsze wersje GameMakera:

Stabilna
2024.2.0.132 • 2024.2.0.163
wydana 43 dni temu
LTS
2022.0.2.51 • 2022.0.2.49
wydana 182 dni temu
Beta
2024.400.0.532 • 2024.400.0.551
wydana 14 dni temu
= IDE, = Runtime
Użytkownicy online
2 użytkowników aktywnych:
gości: 1, userów: 1
 Adriann
(~ostatnie 15 minut)
Discord
Shoutbox
gnysek (20:44, 11.04.24)
Niektórzy dlatego wybierają GMEdit. Ale ja liczę na Code Editor 2, tylko na razie zbyt zbugowany jest.
Tymon (16:11, 11.04.24)
Stitch dla mnie osobiście jest lepszy bo nie musze kopać się z interfejsem GMa i mogę tylko pisać kod.
Tymon (16:05, 11.04.24)
Yes. Obecny nie jest taki zły, jak zainstalowałem najnowszą stabilną to w porównaniu z tym czego używałem... 10 lat temu...? Wszystko wydaje się lepsze.
gnysek (22:48, 10.04.24)
bscotch/stitch ? Ja czekam na fixy do nowego edytora, bo wszystko wydaje się dziś lepsze od tego obecnego :D
Tymon (19:54, 10.04.24)
Hm, Stitch okazuje się całkiem dobrą alternatywą dla wbudowanego edytora
Wojo (22:16, 08.04.24)
siemano huder myślałem, że zniknąłeś całkiem z gmclanu bo na discordzie cie nie ma :D
I am Lord (00:37, 05.04.24)
O dzięki :D
gnysek (09:58, 02.04.24)
Znalazłem na podstawie jego postów: youtube.com/@Jakim_
I am Lord (20:16, 01.04.24)
Ktoś ogarnia jakie konto miał Jakim na YT?
gnysek (16:07, 29.03.24)
Nowy Edytor kodu jednak po świętach
Starsze wpisy znajdziesz w Archiwum.
Ankieta
Ile zarobiłeś do tej pory na grach stworzonych w GM?