Ten przewodnik jest poświęcony zestawie komponentów do
programowania pod DirectX w Object Pascalu (potocznie Delphi). Można
go ściągnąć z tego
miejsca. Cały artykuł będę opierał na kodach źródłowych z Delphi 5.
Przewodnik jest adresowany raczej do początkujących osób gdyż DelphiX
nie pozwala na pisanie aplikacji 3d i skomplikowanych 2d z jednego prostego
powodu - jest za wolne.
DelphiX składa się z 12 komponentów. Opiszę je teraz.
- DXDraw. Jest to podstawowy komponent. Jest jakby obszarem na
którym wszystko jest rysowane. Aplikacja może mieć poand jeden taki
obszar.
Właściwości: (wybrane)
-
align
- "wyrównanie" czyli położenie na formie
-
AutoInitialize
- czy komponent sam ma się inicjować (przygotowywać do pracy), zalecam
ustawienie na true.
-
Constraints
- ograniczenia rozmiaru.
-
Display
- ustawienia rozdzielczości, głębi koloru itp. (używane w trybie pełnoekranowym)
-
Options:
(wszystkie właściwości typu boolean)
-
doFullScreen
- określa czy aplikacja ma pracować na pełnym ekranie
-
doNoWindowChange
- zabrania (jeśli ustawione na true) zmianę stanu okna (maksymalizacja,
minimalizacja, przywrócenie)
-
doAllowReboot
- blokuje (po ustawieniu na false) użycie klawiszy Crtl+Alt+Delete
-
doWaitVBlank
- oczekuje na powrót plamki (likwiduje efekt migotania obrazu)
-
doAllowPalette
- pozwala na użycie wszystkich 256 kolorów z palety na pełnym
ekranie
-
doSystemMemory
- powierzchnia jest zarezerwowana w pamięci systemowej
-
doStrecth
- powierzchnia jest rysowana na ekranie proporcjonalnie do rozmiaru
komponentu
-
doCenter
- powierzchnia jest wyświetlana na środku komponentu
-
doFlip
- automatyczne wywoływanie metody DXDraw.Flip
-
do3D
- Direct3D jest używany
-
doHardware
- użycie akceleracji sprzętowej
-
doRetainedMode
- użycie trybu Retained (tryb w którym operujemy tylko na modelach
resztę wykonuje za nas Direct3D)
-
doSelectDriver
- DirectDraw jest domyślnie użyty na pełnym ekranie. Jeśli chcesz
użyć Voodoo itp. ustaw tą właściwość na true.
-
doZBuffer
- czy użyć Z Bufferingu
-
Surface
Height, Surface Width - rozmiar powierzchni (obszaru
na którym rysuje)
-
Surface
- powierzchnia którą można traktować jako ekran na którym rysujemy.
Wszystko co jest tutaj narysowane zostaje przenoszone do pamęci karty
graficznej przez procedure Flip którą później opiszę. Najczęściej
używane właściwości i metody to:
- Canvas - płótno, na nim
rysujemy bezpośrednio, dzięki standardowym procedurom możemy rysować
koła, linnie, kwadrat itp, oraz wypisywać tekst metodą TextOut.
- procedure Fill(DevCol:LongInt)
- wypełnia jednym kolorem całe płótno, najczęściej używane do
czyszczenia ekranu
-
procedure
Initialize - procedura inicjująca działanie DXDraw.
-
procedure
Flip - kopiuje zawartość powierzchni na ekran. UWAGA!!!
Przed wywołaniem tej metody koniecznie wywołać metodę Canvas.Release
gdyż bez tego system nie rysuje albo się zawiesza.
- DXDIB. Nie będę opisywał tego komponentu gdyż, nie jest on
używany do programowania gier. Opis tego komponentu wykracza poza
ramy tego kursu.
-
DXImageList. Ten komponent służy do przechowywania bitmap których
będziemy używać do rysowania na powierzchni DXDraw. Bitmapy możemy
dodawać do niego przed kompilacja używając odpowiedniej właściwości
w Object Inspectorze. Są również dwie metody dynamiczne na
dodanie bitmap do listy, pierwsza z nich jest to odczytanie ze strumienia
(pliku) elementów zapisanych w specjalnym formacie *.dxg. Drugi
sposób to wywoływanie procedury dodającej nowy element do listy. Tak
samo jak komponent DXDraw tak i DXImageList jest wymagany w każdej aplikacji (tutaj grze) jaką piszemy za pomocą DelphiX.
Właściwości:
- DX3D. Jak wspomniałem na wstępie DelphiX nie nadaje się do pisania
gier 3d więc nie będę opisywał tutaj tego komponentu.
- DXSound. Jest jakby odpowiednikiem DXDraw w dźwięku, do tego
komponentu "wysyłamy" dźwięki które mają być odtworzone,
ten komponent inicjuje kartę dźwiękową itd. Pozwala na użycie DirectSound.
Celowo pomijam tutaj opis właściwości lub metod gdyż są one bardzo
żadko używane.
- DXWave. Tutaj sytuacja powtarza się dokładnie tak samo jak w
DXDIB. DXWave raczej nie używa się w programowaniu gier więc pomijam
tutaj jego opis.
- DXWaveList. Jest to odpowiednik DXImageList. W tym komponencie
jest przechowywana lista plików typu *.wav.
Właściwości: (wybrane)
-
DXSound
- Określa komponent typu TDXSound za pomocą którego będą odtwarzane
dźwięki które są dodane do listy.
-
Items
- właściwość typu TWaveCollection która zawiera listę bitmap
w postaci typu TWaveCollectionItem:
-
Name,
function Find(const Name: string): TWaveListItem,
procedure IndexOf (const Name: string): Integer
- te procedury, funkcje i właściwości opisałem w opisie
DXImageList.
-
procedure
Play(Wait:Boolean) - właściwość typu string
określająca nazwę bitmapy
-
procedure
Stop - zatrzymuje odtwarzanie
-
Frequency
- właściwość typu integer
-
Looped
- właściwość typu boolean określająca czy odtwarzanie danego
dzwięku ma być powtarzane
-
Pan
- właściwość typu integer określająca balans dzwięku, przyjmuje
wartości od -10000 do 10000.
-
Volume
- właściwość typu integer określająca głośność dźwięku,
przyjmuje wartości od -10000 do 0.
- DXInput. Jest to komponent odpowiedzialny za obsługę urządzeń
wejścia używanych do sterowania grą, np. klawiatura, mysz, joystick.
Podstawową metodą jest Update. Ta metoda uaktualnia
stan klawiszy klawiatury, muszy, pozycję wskaźnika myszy itd. Najczęściej
wykorzystywane właściwości do sprawdzania stanu urządzeń wejściowych:
-
Keyboard.Keys[kod_klawisza]
- właściwość typu boolean określająca czy klawisz o kodzie wyrażonym
w nawiasach kwadratowych (index tablicy) jest wciśnięty (gdy true)
-
Mouse.x,
Mouse.y - wektory o jakie przesunoł się wskaźnik myszy
od ostatniego wywołania procedury Update.
-
Mouse.Buttons[numer_klawisza]
- właściwość typu boolean, określająca czy klawisz myszy o numerze
podanym jako index tabeli jest wciśnięty.
- DXPlay. Komponent który można wykorzystać do zaprogramowania
gry sieciowej, ale nie polecam tego gdyż z niewiadomych mi przyczyn
często się wiesza i gryzie z niektórymi kartami sieciowymi. Polecam
użycie Socketów. I dlatego nie opisze tego komponentu tutaj.
- DXSpriteEngine. Moim zdaniem jest to najgorszy składnik DelphiX.
Nie dość ze ma bardzo małe możliwości to jeszcze jest strasznie wolny.
NIGDY nie polecam używać tego komponentu i nie będę go tutaj
opisywał bo to nie ma sensu.
- DXTimer. Jest to udoskonalony standardowy timer Delphi. Jest
o wiele szybszy i posiada jedna przydatną właściwość:
FrameRate - ilość klatek na sekundę
Po opis innych właściwości odsyłam do opisów standardowych
timer'ów.
W trakcie pisania doszedłem do wniosku, że nie ma sensu
dołączać przykładowego kodu źródłowego gdyż wszystko jest bardzo dobrze
opisane w przykładach dołączonych do DelphiX. Z tych przykładów i
z helpa DelphiX czerpie całą wiedze o tych komponentach. {albo z kursu, który znajdziecie tu za miesiąc ;) - Heniu}
|