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 sprite po np. 16×16 każda klatka na której może być np. jedna gwiazda. Nazwijmy ten obrazek po prostu „obrazek” 🙂 a PatternWidth i PatternHeight ustawmy na rozmiar klatki czyli w naszym przypadku 16 i 16.
Teraz między uses a type wpiszmy:
1 2 3 4 5 6 |
type TScrollBackground = class(TBackgroundSprite) private FSpeed: Double; public procedure DoMove(MoveCount: Integer); override; end; |
Następnie zadeklarujmy w var:
ScrollBackground:TScrollBackground;
Między implementation a end. wprowadźmy :
1 2 3 4 5 |
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ą stronę musicie zmienić znak + na -, a żeby przesuwało się poziomo należy zmienić Y na X.
Teraz kliknijcie na DxTimer i na zakładkę events a tam dwa razy na OnTimer i wpiszcie:
1 2 3 4 |
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 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
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ć 🙂
Autor: Nakiel