Skoro już wiemy, co chcemy możemy poczynić pierwsze kroku ku obranemu przez nas celowi-Stworzeniu profesjonalnej gry pod windowsa z wykorzystaniem Delphi, DirectX no i oczywiście WinApi(hehe:). Aby kontynuować musisz zdobyć przetłumaczone na Delphi nagłówki DirectX.

Możesz je z powodzeniem znaleźć w Internecie. Gdy ów nagłówki zostaną przez ciebie ściągnięte możemy przystąpić do dalszej części kursu. Oki. Teraz tworzysz nowy projekt WinApi. I jak zwykle kasujesz całą zawartość (chamstwo, nie?:). Na początku piszemy coś takiego:

Tym sposobem informujemy kompilator, że będziemy pisać program(odkrywcze, nie?:), o nazwie wewnętrznej ApiWin. Po tym zabiegu dodajemy plik zasobów do naszej aplikacji. Dzięki temu zasobowi nasz program będzie miał ikonę. Tak tak teraz sami musimy o to zadbać. Najprościej taki plik z zasobami można zrobić w restoratorze, który znajdziesz w Komputer Świat Ekspert nr. 3/2003 (4). Który możesz zamówić archiwalnie pod numerem telefonu (nie będę go podawał, bo jeszcze mnie oskarżą o jakieś sztuczne promowanie tejże gazet, ale wierzcie mi, są tam naprawdę cool rzeczy). Aby wkompilować zasób do pliku *.exe używamy {$R jakiś tam plik zasobów}. Jeśli nie mamy ochoty zdobywać restoratora możemy zrobić to na dwa inne sposoby. Na pierwszy trzeba by poświęcić osobny artykuł a drugi to podstępna sztuczka. Może podebrać plik zasobów z „normalnego” projektu *.dpr(w katalogu ów projektu powinien być plik *.res). Dobra wróćmy do naszego kursu. W naszym przypadku piszemy:

Tym sposobem wkompilowaliśmy zasób. Następnie w sekcji uses używamy Messages(odpowiada za nazwy komunikatów), Windows i DirectDraw (chyba nie muszę tłumaczyć, do czego służą te dwa ostatnie:).

Deklarujemy stałe i zmienne:

A oto główny punkt programu. Inicjalizacja trybu graficznego (rozdzielczość). W tym arcie tylko tyle, ponieważ postanowiłem skupić się na WinApi. Oto jedyna procedura powiązana, z DirectX w tym arcie(zawsze coś:). Omówimy do końca WinApi a potem będziemy bawili się z narzędziami Bila(co ja pisze… Przecież windows to też jego produkt:).

h_Wnd to uchwyt do naszego okna. teraz kod naszej funkcji tradycyjnie zaczynający się od begin a kończący na end ;). Warto zwrócić uwagę, że w języku c++ mamy NULL a w Pascalu jego odpowiednikiem jest nil. Może to się bardzo przydać, jeśli będziesz coś przenosić z MSSDK microsoftu. Idąc dale dochodzimy do funkcji lpDD.SetDisplayMode, która ustawia rozdzielczość a DirectDrawCreate tworzy obiekt o jakiejś tam nazwie(konkretnie lpDD:). Pierwszy parametr to szerokość, drugi to wysokość a trzeci to ustawienie kolorów. Mamy do wyboru 8, 16, 24, 32 bitowy kolor. Im większy tym oczywiście lepszy:).

Nie jest to takie straszne, nie? Tak wygląda zainicjowanie trybu graficznego z wykorzystaniem DirectDrawa. Jest to równie proste jak w DelphiX czy PowerDrawie. A teraz to co programiści lubią najbardziej czyli WindowProc. Kierujemy tu wszystkimi zdarzeniami tak jak na zakładce Ewents w Vcl. Wystarczy że przeczytasz nazwy zdarzeń i wiesz o co chodzi:).

taaa…. Teraz musimy zarejestrować nasze okienko. Nie ma sensu bym to dogłębnie omawiał skoro mamy zamiar programować gry. I tak nie będziemy z tego praktycznie nigdy korzystać. Ważne , że jest i działa :). Tylko jedynym wartym omówienia składnikiem jest WindowClass.hIcon := LoadIcon( hInstance, MakeIntResource( 102 ) ); Nadaje ikonkę z zasobów naszemu programikowi(tą w lewym górnym rogu).

Teraz tworzymy/kreujemy nasze okno. Parametry dla fullscrena nieco się zmienią, omówię to w następnym artykule(jak dam radę go napisać;).

Uwaga! Uwaga! Coś nowego dla ciebie jeśli ciągle programowałeś w Vcl!!! Akcja naszego programu dzieje się między begin a end a nie w żadnej procedurze/funkcji wywoływanej co jakiś czas. Dzięki głównej pętli programu uzyskujemy maksymalną wydajność.

Doszliśmy do sedna sprawy. PeekMessage pobiera komunikaty wysyłane przez windows, TranslateMessage przetwarza je a DispatchMessage Wysyła. Tak wygląda prawdziwa aplikacja napisana dla windowsa. Nasza pierwsza 32-bitówka(aż łezka kręci się w oku:).

Autor: HNB