Najczęściej zadawane pytania

W e-mailach i poprzez komunikatory zadajecie mi wiele różnych pytań. Sporo z nich się powtarza, więc postanowiłem dodać do stronki FAQ [ang. Frequently Asked Questions = Najczęściej Zadawane Pytania], w którym będę Wam na takie pytania odpowiadał, żebym nie musiał tracić czasu na powtarzanie w kółko tych samych odpowiedzi ;-J

Pytania o witrynę GameCreator

Kiedy zaktualizujesz stronę?
Kiedy będzie kurs xxxx lub yyyy?

Takie pytania pojawiają się najczęściej. Naprawdę chciałbym aktualizować częściej, ale poza siedzeniem na kompie mam jeszcze własne życie, obowiązki, przyjaciół itd., więc sami wiecie jak to jest. A z taką stronką jest kupa roboty! Na nadmiar wolnego czasu nie narzekam, stąd aktualizacje nie są aż tak częste. Jeśli przez dłuższy czas nie aktualizuję, to zazwyczaj oznacza że szykuję jakąś niespodziankę. Więc zanim napiszesz do mnie maila w sprawie aktualizacji wiedz, że staram się jak mogę by stronka ciągle się rozrastała i była najlepszym kompendium wiedzy na temat tworzenia gier.

Kiedy będzie jakiś kurs OpenGL?
Może po prostu przetłumacz kursy z NeHe?

Jako że poszerzyłem ostatnio moje zainteresowania o nowe platformy systemowe, kurs OpenGL powinien prędzej czy później się ukazać ;-) bo ze względu na jego wieloplatformowość ma on dla mnie teraz większy priorytet, niż DirectX ;-J

Kursy z NeHe są rozbudowane, ale trochę za bardzo pokomplikowane, co osłabia ich wartość dydaktyczną ;-P Po prostu są zbyt zamotane, żeby dało się z nich łatwo pojąć OpenGL, i niepotrzebnie mieszają rzeczy niezwiązane z tematami lekcji, co jeszcze bardziej zaciemnia przykładowe kody. Dlatego wolę zrobić kursy po swojemu, czyli najprościej jak się da ;-) Planuję napisać w nich rzeczy, których nie znajdziecie nawet na NeHe ;-) Poczekamy, zobaczymy...

Dlaczego nie widzę menu strony?

Już to poprawiłem ;-) Stara strona była prawie w całości zbudowana w oparciu o JavaScript. Wystarczyło, by Twoja przeglądarka nie obsługiwała JavaScript lub miała go wyłączonego, i na mojej stronie zostawała tylko goła treść ;-P Po dostosowaniu strony do standardów W3C powinna już prezentować się dobrze we wszystkich znanych mi przeglądarkach graficznych, a także niegraficznych, na komórkach, palmtopach, czy w przeglądarkach głosowych ;-)

Pytania o C++

Dołączyłem bibliotekę xxxx.h, ale mi się nie kompiluje. Dlaczego?

Bo to nie jest biblioteka, tylko jej plik nagłówkowy :-P [a jak gdzieś piszą inaczej, to cisną kit ;-P]. Pliki nagłówkowe jedynie informują kompilator o nazwach użytych w bibliotece, żeby je znał i nie protestował, gdy zobaczy je w Twoim kodzie. Są w nich zapowiedzi funkcji, definicje nowych typów danych itp. Jednak kod funkcji i cała reszta jest trzymana osobno, w skompilowanych bibliotekach. Żeby dało się skorzystać z nich w programie, specjalne narzędzie [linker] musi połączyć Twój program z tymi bibliotekami. Żeby linker mógł to zrobić, musisz mu powiedzieć, jakie biblioteki ma dołączyć. Jeśli korzystasz z jakiegoś środowiska programistycznego, poszukaj tego w opcjach projektu. Więcej informacji na ten temat znajdziesz w lekcji kursu Podstawy języka C++.

Jak zrobić, żeby okno konsoli nie zamykało się po zakończeniu programu?

Problem ten występuje tylko pod Windows, bo tam okno konsoli jest automatycznie tworzone dla programu konsolowego i zamyka się przy zakończeniu programu. Żeby to obejść, wystarczy uruchomić swój program w już otwartym oknie konsoli. Wtedy okno konsoli nie należy już do programu i nie jest zamykane razem z nim. Aby otworzyć okno konsoli pod Windows, kliknij Menu Start -> Uruchom, wpisz cmd [command pod Windows 98] i wciśnij OK. W oknie konsoli przejdź do katalogu z twoim programem [polecenie cd "C:\katalog z programem\"] i uruchom program, wpisując jego nazwę [np. MojProgram.exe].

W niektórych kursach możesz spotkać sposób, który polega na dołączeniu nagłówka cstdlib i wywołaniu system("pause"), co powoduje czekanie na naciśnięcie klawisza. To rozwiązanie jest złe, bo polecenie pause działa tylko pod Windows. Jeszcze gorsze jest rozwiązanie, w którym dołącza się nagłówek conio.h i wywołuje funkcję getch, bo ten nagłówek to niestandardowy wymysł firmy Borland na potrzeby ich kompilatora i zazwyczaj jest niedostępny pod innymi kompilatorami.

Zresztą, tak czy siak wstrzymywanie pracy programu po jego zakończeniu i czekanie na klawisz to zła praktyka, bo wtedy program nie może być użyty z poziomu skryptów systemowych [pliki .bat pod Windows, lub skrypty Basha w systemach unixowych]. Zastanów się, kto wciśnie ten klawisz, gdy program ma być automatycznie wywoływany ze skryptu? ;-J

Jak zrobić kolorowy tekst w konsoli?
Jak przeskoczyć w inne miejsce ekranu konsoli?

Nie da się ;-D Kolory tekstu, czcionki i skakanie po ekranie to możliwości ekranu tekstowego, czyli terminala. Konsola może używać ekranu terminala do wyświetlania tekstu, ale wcale nie musi ;-P bo przecież może też wysyłać tekst do drukarki, pliku, albo przesyłać przez sieć. A wtedy pojęcia "pozycja na ekranie" czy "kolor tekstu" tracą swój sens. Dlatego sama konsola działa tylko na zasadzie pytanie/odpowiedź, w sposób strumieniowy.

Żeby użyć kolorów tekstu lub skakać po ekranie, potrzebujesz już osobnej biblioteki do obsługi ekranu tekstowego. Ze swojej strony polecam bibliotekę ncurses, lub jej windowsową wersję pdcurses, właśnie z tego względu, że są przenośne na różne platformy systemowe ;-J Odradzam Ci natomiast stosowanie conio.h, bo jest to niestandardowy nagłówek dostępny jedynie w kompilatorach firmy Borland, i rzadko jest dostępny dla innych kompilatorów. Używanie API systemu Windows do manipulowania oknem konsoli również nie jest zbyt dobrym rozwiązaniem, bo nie będzie działać na innych systemach.

Napisałem taki program: (tu hektary kodu). Gdzie jest błąd?

Nikt nie lubi zagadek z serii "Wytłumaczcie mi co ja tu napisałem" ;-J Programista musi rozumieć, co pisze. Bo jeśli nie rozumie, to może przypadkiem napisać kod formatujący dysk twardy ;-D Radziłbym też unikać wklejania w swoich programach kodu, którego działania się nie rozumie, bo to najczęściej powoduje błędy [żeby tylko :-P]. Zobacz też odpowiedź na kolejne pytanie poniżej...

Napisałem program ale wywala mi jakiś błąd :-(

Na jakieś błędy najlepsze są jakieś rozwiązania ;-P
A tak serio, to niestety nie jestem wróżem i jeszcze nie umiem wróżyć z klozetu ;-) Może być tysiące różnych błędów i nie wiem, który z nich wyskakuje akurat Tobie ;-J Dlatego jeśli już pytasz o przyczynę błędu, to koniecznie odpisz dokładnie komunikat błędu, jaki ci się wyświetla, i najlepiej dołącz fragment kodu, w którym kompilator znajduje ten błąd.

Pytania o tworzenie gier

Jak się robi grę?
Jak zrobić animowanego mecha co szczela rakietami?
Jak zrobić, żeby hipek chodził po ekranie jak nabijam w klawisze?

:-) Na takie pytania niestety nie ma prostej odpowiedzi ;-P Po prostu są zbyt ogólne. To tak jakby zapytać: "Co możesz mi powiedzieć o historii?" ;-J Jednak jeśli będziesz czytać uważnie to, co piszę na tej witrynie, oraz co piszą inni ludzie w Internecie, to stopniowo zdobędziesz dość wiedzy, by samemu odpowiedzieć sobie na takie pytania ;-)

Gdzie mam nacisnąć, żeby wyszła gra?

:-) Takie pytania niestety też się pojawiają, a to wszystko przez przeróżne programy, w których da się "wyklikać" proste gry nie mając pojęcia o programowaniu ;-P Niestety nie ma lekko. Żeby stworzyć bardziej sensowną grę, to trzeba się trochę napracować i mieć pojęcie o programowaniu. Jednak dla chcącego nic trudnego ;-) Wszystkiego możesz się nauczyć między innymi z mojej stronki, a najlepiej robić to po kolei.

Zrobiłeś już jakieś gry?

Najprostsza odpowiedź brzmi "Tak", ale wtedy nie powiedziałbym całej prawdy ;-J Dlatego może trochę rozpiszę się na to pytanie...

Historia zaczyna się już w czasach, gdy miałem komputer Atari. Wtedy nauczyłem się programować w języku BASIC i pisałem proste gierki, typu "ludek w labiryncie zbiera kryształy" ;-J [w trybie textowym]. To było gdzieś tak w okolicach podstawówki. Później okazało się, że BASIC to za mało: jest zbyt powolny i nie pozwala na wyciśnięcie z kompa wszystkiego. Dzięki gazetce "Tajemnice Atari" nauczyłem się języka Assembler i w czystym kodzie maszynowym pisałem gry. Też proste, bo nie miałem dobrych narzędzi, a ręczne "kompilowanie" kodu Assemblera do postaci cyfrowych kodów maszynowych było nużące ;-P ale coś tam już przynajmniej lepiej to graficznie wyglądało ;-)

Później była przesiadka na PC. Najpierw nauczyłem się programować w języku Turbo Pascal [na kółku informatycznym]. To była jedna wielka kiszka, bo max tryb graficzny to było 640x480 16 kolorów ;-J ale dało się napisać coś w stylu "Tetrisa". Później dojechałem program "Klik & Play" i próbowałem robić gry w nim ;-) bo miał okienka i lepszą grafikę. Zrobiłem kilka labiryntówek i strzelankę kosmiczną. Jak chodziłem zdawać na prawko, to zrobiłem też programik symulujący jazdę samochodem [widok ulic z góry, jak w "GTA" ;-P] do nauki przepisów ruchu drogowego ;-D K&P miał jednak jedną poważną wadę: brak przewijania ekranu :-P No i słabo się nadawał do gier bardziej wymagających graficznie [był zbyt powolny :-P]. W międzyczasie uczyłem się jeszcze jezyka C++ [albo raczej C, z gównianej książki Helionu].

Aż tu pewnego dnia wpadła mi w ręce gazetka bodajże "CD-Action", a w niej płytka z pełny mpakietem SDK do DirectX 5 ;-) Wiedziałem już wtedy, że DirectX to jest "coś takiego, czego potrzebują gry, żeby działać" :-P A tam dodatkowo napisali, że dzięki temu można programować gry używające DirectX w języku C++ ;-> Więc zacząłem naukę, mając jedynie SDK i jego plik pomocy z dokumentacją funkcji ;-J

Pierwszą moją grą pod DirectX była "kulka odbijana deską" :-P Umiałem też przewijać ekran i wyświetlać mapki kafelkowe ;-J Jednak wiadomo jakie koślawe jest API DirectX ;-P więc podjąłem decyzję, że najlepiej zrobię, jeśli opakuję sobie tego DirectDraw'a w jakieś swoje klasy w C++ i zrobię coś w rodzaju silnika 2D. To, co było kiedyś na mojej stronce w dziale "Silnik", to była już jego druga wersja.

Pierwsza miała pewien błąd ;-P Każdy sprite przetrzymywał własną bitmapkę w pamięci video, nawet jeśli miałem 100 identycznych sprite'ów ufoka :-P więc szybko zaczynało tej pamięci brakować. Druga wersja była udoskonalona w taki sposób, że obrazki były osobno a "centrum dowodzenia spritem" były osobno, i mogły współdzielić jeden obrazek ;-J I właściwie ten silnik by już się świetnie nadawał ;-) Jednak w międzyczasie zainteresowałem się Direct3D i okazało się, że można w nim robić o wiele lepsze efekty, np. półprzezroczystość [kanał alpha] i obroty obrazka, czego w DirectDraw bym nigdy nie osiągnął :-P Zacząłem więc projekt silnika od nowa, tym razem pod Direct3D.

"Dziś sam jestem dziadkiem...." :-D Czyli dotarliśmy do czasów obecnych ;-) A obecnie przesiadłem się z Windowsa na Linuxa, więc zacząłem doceniać biblioteki wieloplatformowe ;-) takie jak OpenGL czy SDL :-> Jeśli kiedyś wrócę do projektu silnika do gier [a wrócę na pewno :-P], to będzie on wtedy korzystał z OpenGL i SDL ;-) Gdy go zrobię, pozwoli mi w łatwy sposób pisać różne gry :-> [jedną taką grę już mam nieźle zaprojektowaną, ale to narazie tajemnica ;-J].

Na konto gier, które kiedykolwiek napisałem, dorzucić bym mógł jeszcze takie, co napisałem na zaliczenie w szkole różnym osobom. Np. "Puzzle", "Labirynt", "Kółko i Krzyżyk" [można grać z komputerem ;-)]. Są one napisane w Borland C++ Builder jako aplikacje okienkowe.

Pytania ogólne

Jak zrobić xxxx lub yyyy?
  1. Sprawdź, czy nie odpowiedziałem już na to w tym FAQ :-)
  2. Poszukaj w dokumentacji. Jeśli chodzi o API, spróbuj poszukać na MSDN.
  3. Pomyśl trochę przed snem, może rozwiązanie po prostu ci się przyśni ;-) [nie, to nie jest żart, ja bardzo często korzystam z tego sposobu ;-)].
  4. Jeśli wszystkie powyższe sposoby zawiodły, pisz do mnie . Możliwe że będę znał odpowiedź.

Subskrybcja

Buttony
Button1 Button2 Button3 Button4 Button5 Button6 Button7 Dodaj swój button