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:
[URL=protogame.psichix.com/docs/cpp_programowanie_gier_-_czesc_1.pdf]C++ Programowanie Gier - Część 1.pdf[/URL]
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:
[URL=protogame.psichix.com/.../URL]
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/files/texts/mgt/html/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.11.0.179 • 2024.11.0.227
wydana  3 dni temu
LTS
2022.0.3.85 • 2022.0.3.99
wydana 19 dni temu
Beta
2024.1100.0.713 •
2024.1100.0.726
 0.14.0

wydana 11 dni temu
= IDE, = Runtime, = GMRT
Użytkownicy online
1 użytkownik aktywny:
gości: 1,
(~ostatnie 15 minut)
Discord
39 użytkowników online na discordzie:
🧁Cupcake🧁, Nitro Slav, Carl-bot, Jamabaiz (Matrix_), lethian, jAfF, Alkapivo, Kowu, LadyLush, GMRussell, OdrzuconyKrakers, fervi, Radek Ignatów, Kalor, PhysX ᴺⱽᴵᴰᴵᴬ, r..., Cysior, antek, HappyOrange, Moldis, MagnusArias, yazaa, Domeen0, Dyno, 🆅🅸🆃🅾74🅼, szmalu, ZYGZAK, bagno, Sporek, Danieo, Mtax, Kandif, Huder, l..., Jayu, moeglich, s..., Krzysiek1250, Shockah
Shoutbox
Uzjel (20:17, 10.12.24)
Cały ruch przeniósł się na Discorda.
MagnusArias (17:43, 01.12.24)
O matko... a ja tutaj jestem od ponad 15 lat i czasami zaglądam... biernie bo biernie, ale czasem wpadnę
gnysek (11:46, 17.11.24)
Witamy, witamy!
baca (12:22, 16.11.24)
To już 25 lat.. Witam po paru latach nieobecności.
gnysek (11:05, 15.11.24)
Natomiast obecne forum istnieje od 2004, jak z iglu.cz na gmclan.org przeszliśmy i od tego czasu nie było resetów danych.
gnysek (12:35, 13.11.24)
Ogólnie GMCLAN istnieje 22 lata, ale na to trofeum nie zrobiłem (jeszcze xD)
Chell (20:41, 08.11.24)
wow, ta emotka w ogóle nie wygląda jak : O xD
Chell (20:40, 08.11.24)
tylko? :O 4tk ma 15
Borek (18:12, 07.11.24)
Właśnie dostałem powiadomienie z forum, że jestem na GMClanie 18 lat :D Ja pierdzielę...
S
Sutikku (08:43, 18.10.24)
TIL, gamemaker jest starszy ode mnie
Starsze wpisy znajdziesz w Archiwum.
Ankieta
Ile zarobiłeś do tej pory na grach stworzonych w GM?