Animowane tło
Artykuł opisuje w jaki sposób korzystać z obiektów TBackgroundSprite umożliwiających tworzenie animowanego tła w grze.
1. Na początku wstawmy na formę odpowiednie komponenty :
Komponent Proponowana nazwa
DXSpriteEngine DXSpriteEngine1
DXTimer DXTimer1 (Interval 0)
DXDraw DXDraw1 (align alClient)
DXImageList DXImageList1
Dla DXImageList i DXSpriteEngine w polu DxDraw wybierzcie DxDraw1. W DXImageList dodajmy obrazek najlepiej jakiś nieduży sprit po np. 16x16 kazda klatka na, której może być np. jedna gwiazda. Nazwijmy ten obrazek poprostu obrazek :) a PatternWidth i PatternHeight ustawmy na rozmiar klatki czyli w naszym przypadku 16 i 16.
Teraz między uses a type wpiszmy:
Kod:
type TScrollBackground = class(TBackgroundSprite)
private
FSpeed: Double;
public
procedure DoMove(MoveCount: Integer); override;
end;
Nastepnie zadeklarujmy w var:
ScrollBackground:TScrollBackground;
Między implementation a end. wprowadźmy :
Kod:
procedure TScrollBackground.DoMove(MoveCount: Integer);
begin
inherited DoMove(MoveCount);
Y := Y + MoveCount*(60/1000)*FSpeed;
end;
To jest procedura ruchu naszego tła. W takiej postaci kodu tło będzie się przesuwać z góry na duł z prędkością 60/1000 Jeśli chcecie żeby przesuwało w drugą strone musicie zmienić znak + na -, a żeby przesuwało się poziomo nalerzy zmienić Y na X.
Teraz kliknijcie na DxTimer i na zakładke events a tam dwa razy na OnTimer i wpiszcie:
Kod:
DXDraw1.Surface.Fill(clBlack); // czyszczenie ekranu
DXSpriteEngine1.Move(lagCount); // wykonuje funkcje OnMove
DXSpriteEngine1.Draw; // rysuje tło
DXDraw1.Flip; // wyświetlanie wszystkiego na ekranie
W Form1.FormCreate umieśćmy kod :
Kod:
var
i, j: Integer;
begin
with TScrollBackground.Create(DXSpriteEngine1.Engine) do
begin
SetMapSize(200, 10);
Image := DXImageList1.Items.Find('obrazek');
// sprit z różnymi obrazkami np. z chmurkami, gwiazdkami itp.
Y := 10;
Z := -3;
FSpeed := 0.25;// prędkość poruszania się tej warstwy
Tile := True;
for i:=0 to MapHeight-1 do
for j:=0 to MapWidth-1 do
begin
Chips[j, i] := Image.PatternCount-Random(Image.PatternCount div 1);
// funkcja losująca obrazek
if Random(2)<1 then Chips[j, i] := -1;
// gęstość obrazków na ekranie
// Random(2)<1 im większa liczba tym mniejsza gęstość
end;
end;
Takich funkcji możemy dać tutaj więcej. Powinno wszystko działać, ale jeśli masz probley to zajrzyj do kody źródłowego.
Pobierz załącznik