----------------------------------------------- -------- DirectX in Delphi (cz 2) -------- -------- Copyright by Sulek [r] -------- -------- sulek@shnet.pl -------- -------- http://coders.shnet.pl/klub/ -------- -------- ^ wiecej artykulow ^ -------- ----------------------------------------------- Dokument powstal: 02 08 2000 r
Witam w kolejnej, juz drugiej zcesci naszego tutoriala !
Skoro tutaj trafiles pierwsza czesc pewnie przypadla Ci do gustu. W drugiej
tez nie pozwole Ci sie nudzic:-)
Pokaze tu, jak wykorzystywac bitmapy w swoich aplikacjach, jakje obracac, nakladac na nie efekty itp.
Zaczynamy !
Aby wstawic bitmape skorzystamy z komponentu TDXImageList
Czyli tworzymy nowy projekt w indetyczny sposób jak w tutorialu nr 1
Nie dodajemy jednak komponentu TDXTimer ani TDXInput. Przeciagamy komponent TDXImageList na forme.
W Object Inspektorze wybieramy Items i dodajemy jakis obrazek (tylko BMP i DIB - nawet jesli Twoje Delphi czyta inne formaty).
Teraz przechodzimy do procedury obslugi zdarzenie OnCreate dla MainForm i wpisujemy:
// inicjujemy DXDraw DXDraw.Initialize; // Sprawdzamy czy mozemy rysowac if not DXDraw.CanDraw then begin // jesli inicjacja sie nie powiodla MessageBox(Handle, 'DXError', 'Blad inicjacjiDirectX', 0); Close; end; // uaktualniamy palete kolorow DXImageList.Items.MakeColorTable; DXDraw.ColorTable := DXImageList.Items.ColorTable; DXDraw.DefColorTable := DXImageList.Items.ColorTable; DXDraw.UpdatePalette; // rysujemy bitmape DXImageList.Items[0].Draw(DXDraw.Surface, 10, 10, 0); DXDraw.Surface.Canvas.Release; // wyrzucamy na ekran DXDraw.Flip;
Udało sie ! Na ekranie wyświetlony został obrazek.
Zrodla do przykladu 4
procedure TMainForm.DXTimerTimer(Sender: TObject; LagCount: Integer); begin DXTimer.Enabled:= false; // wylaczenie Timera Inc(Alpha,5); // zwiekszenie intensywnosci if Alpha > 255 then Alpha:= 0; // jezeli max wartosc to przypisz wart. min // czyszczenie kranu DXDraw.Surface.Fill(0); // rysowanie obrazka DXImageList.Items[0].DrawAlpha(DXDraw.Surface, Rect(100, 100, 364, 164), 0, Alpha); // surface ==> ekran DXDraw.Surface.Canvas.Release; DXDraw.Flip; DXTimer.Enabled:= True; // wlaczenie Timera end;
Zrodla do przykladu 5
TDirectDrawSurface.DrawRotate
Ta procedura obraca bitmape o podany kat (Angle)
Naprosciej bedzie wytlumaczyc jej dzialanie na przykladzie.
Usun z procedury obslugi zdarzenia onTimer procedure odpowiedzialna za rysowanie (DrawAlpha).
W jej miejsce wpisz:
DXImageList.Items[0].DrawRotate(DXDraw.Surface, 300, 300, 264, 64, 0, 0, 0, Angle);
Pozwolilem sobie zmienic takze nazwe zmiennej Alpha na Angle oraz dla uproszczenia usunalem mechanizm
sprawdzajacyczy osiagnela juz ona maxymalna wartosc.
Ta procedura powinna wyswietlic nasza bitmape (zakladam, ze jej rozmiary to 264x64)
obrocona o kat Angle wokol punku P(300, 300). Rozmiary bitmapy wynosza 264x64.
Zrodla do przykladu 6
Na podstawie wyzej wymienionych przykladow mozesz juz sam rozszyfrowac procedure DrawAlphaRotate oraz
DrawWaveX (zadanie domowe ;-)
Nastepnej lekcji jeszcze nie ma...
Strona główna
Poprzednia lekcja
Następna lekcja
******************************** *Paweł Sulkowski * *e-mail: sulek@shnet.pl * *http://coders.shnet.pl/klub/ * ********************************