Najczęściej zadawane pytania

   Dostaję od was dużo listów z różnymi pytaniami. Wiele pytań powtarza się, a odpowiadanie ciągle tak samo jest trochę męczące i wkurzające. Dlatego postanowiłem dodać do stronki FAQ [ang. Frequently Asked Questions - Najczęściej Zadawane Pytania], w którym będę odpowiadał na najczęściej przysyłane przez was w listach pytanka.


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, szkołę, 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 są tak rzadko. 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?
Czy mógłbyś przetłumaczyć kursy z NEHE?

Kurs OpenGL będzie, ale najpierw chciałbym dokończyć kurs DirectX. Jak się łapie wszystkie sroki za ogon, to nie złapie się ani jednej ;-). Kursy z NEHE są rzeczywiście niezłe, ale trochę za bardzo pokomplikowane jak na zadania, które mają spełniać. Dlatego prawdopodobnie zrobię kursy po swojemu, czyli najprościej jak się da ;-). Poczekamy, zobaczymy...
Dlaczego nie działają mi przykłady do kursów DirectDraw, a u kumpla chodzi normalnie?
Problem bierze się stąd, że w przykładowych programach funkcje blittujące nie czekają na zakończenie operacji. Na starszych grafkartach nie powodowałoby to problemu, ale nowe grafkarty [np. z prockami nVidii] potrafią zdaje się wykonywać kilka blittów równocześnie, by szybciej tworzyć obraz. Gdy teraz zaczniemy mazać ekran i, nie czekając na zakończenie tej operacji, zaczniemy coś na nim rysować, niezakończona operacja czyszczenia ekranu zamaże nam od czasu do czasu naszą grafikę i obraz będzie dziwnie migotać. Rozwiązaniem problemu jest dodanie flagi DDBLIT_WAIT do funkcji blittujących co spowoduje, że funkcje te nie będą powracać dopóki wykonywana przez nich operacja się nie zakończy. Poprawiłem to już w przykładowym kodzie i przekompilowałem, więc teraz powinno być już dobrze.
Dołączyłem <xxxx.h>, ale kod nie chce mi się skompilować. Dlaczego?
Pliki nagłówkowe zawierają jedynie zapowiedzi funkcji oferowanych przez daną bibliotekę, by kompilator je znał i nie protestował. Jednak kompilator nie zna adresów funkcji znajdujących się w innych plikach i w miejscach ich wywołania zostawia puste miejsca. Dopiero linker zajmuje się wypełnianiem tych wywołań i łączeniem plików wynikowych kompilatora w gotowy plik wykonywalny. Żeby linker mógł zrobić co do niego należy, potrzebuje adresy funkcji, a te znajdują się w bibliotekach statycznych, które należy dołączyć w opcjach projektu. Więcej informacji na ten temat znajdziesz tutaj.
Gdzie mam nacisnąć, żeby zrobić grę?
:-) Takie pytania niestety też się pojawiają. Niestety nie ma lekko. Tworzenie gier to ciężka praca, nie tylko umysłowa. Jednak dla chcącego nic trudnego. Wszystkiego możesz się nauczyć między innymi z mojej stronki, a najlepiej robić to po kolei.
Mam ciągłe problemy z Dev-C++, co robić?
Zmień Dev'a ;-). Najpewniej ściągnąłeś sobie wersję 5, która jest dopiero w fazie testowania i ciągle jeszcze działa niestabilnie. Zassaj sobie lepiej finalną wersję 4 tego środowiska. Jest stabilna i działa bez niespodzianek.
Dlaczego w menu strony są krzaczki, zamiast polskich liter?
Już nie ma, poprawiłem to. Problem polegał na tym, że szkielet strony był generowany przez JavaScript, w którym domyślnym kodowaniem jest UTF-8. Rozwiązaniem było użycie encji HTML z kodami znaków w standardzie Unicode.
Jak zrobić, żeby okno konsoli nie zamykało się po zakończeniu programu?
Cóż.. Napisałem że można to ustawić w systemie, ale okazało się że już nawet nie pamiętam, gdzie to się robi i czy to da się wogóle ;-J. Ale nic to! Można sobie poradzić inaczej. Najprościej jest dołączyć bibliotekę standardową <stdlib.h> i użyć instrukcji system("PAUSE"), która wywoła podaną w nawiasie komendę DOSa i poczeka na naciśnięcie klawisza. Innym sposobem jest poczekać, aż użytkownik wpisze cokolwiek z klawiatury, czyli pobrać jeden znak ze strumienia wejściowego cin. Borlandowcy mogą to zrobić dołączając bibliotekę <conio.h> i wywołując funkcję getch().
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 ;-).
4. Jeśli wszystkie powyższe sposoby zawiodły, . Możliwe że będę znał odpowiedź.