W ostatnim artykule nauczyliśmy się wyświetlać obrazek. Nadszedł czas na trochę dynamizmu. Tym razem będziemy przesuwać rysunek za pomocą klawiszy.
1. Na początku wstawmy na formę odpowiednie komponenty :
Komponent -Proponowana nazwa
DXInput – DXInput
DXSpriteEngine – SEngine
DXTimer – DXTimer1
DXDraw – DXDraw1
DXImageList – DXImageList1
2. Deklarujemy nowy obiekt oparty o klasę TImageSprite. Jego zadaniem jest uzyskanie dostępu do procedury DoMove odpowiedzialnej na poruszanie rysunkiem. Poniższy kod należy umieścić przed type TForm1 = class(TForm)
1 2 3 4 5 |
type TGracz = class(TImageSprite) protected procedure DoMove(MoveCount: Integer); override; end; |
Teraz pod implementation umieszczamy kod:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
procedure TGracz.DoMove(MoveCount: Integer); begin inherited DoMove(MoveCount); if isUp in Form1.DXInput.States then Y:=Y-2; if isDown in Form1.DXInput.States then Y:=Y+2; if isLeft in Form1.DXInput.States then X:=X-2; if isRight in Form1.DXInput.States then X:=X+2; end; |
Jest to nasza procedura odpowiedzialna za ruch. Dodaliśmy do niej cztery warunki związane z wciśniętymi klawiszami. np. warunek 1
jeżeli(if) strzałka w górę jest(in) w zbiorze wciśniętych klawiszy wtedy(then) przesuń rysunek o 2 piksele w górę.
Obsługę poruszania obiektu mamy już z głowy. Teraz musimy stworzyć nasz obiekt i przypisać mu początkowe wartości. Dodaj jakiś obrazek, którym chcesz poruszać do DXImageList, a następnie przed implementation wpisz :
1 2 |
var Gracz : TGracz; |
Zaś w OnCreate Formy :
1 2 3 4 5 6 7 8 9 10 11 |
procedure TForm1.FormCreate(Sender: TObject); begin Gracz := TGracz.Create(SEngine.Engine); Gracz.Image := DXImageList1.Items[0]; Gracz.Width := DXImageList1.Items[0].Width; //dlugosc Gracz.Height:= DXImageList1.Items[0].Height; //szerokosc Gracz.X := 50; //pozycja x Gracz.Y := 50; //pozycja y end; |
Przejdźmy do OnTimer i dodajmy kod :
1 2 3 4 5 6 7 8 9 |
DXInput.Update; //pobierz zbiór wciśniętych klawiszy SEngine.Move(lagcount); //wykonaj wszystkie zadanie dla obiektów należących do engine SEngine.Draw; // wyświetl obiekty należące do engine DXDraw1.flip; // pokaż wszystko na ekranie DXDraw1.Surface.Fill(0); //wyczyść ekran |
Po uruchomieniu programu zobaczymy nasz obrazek, którym będziemy mogli poruszać za pomocą klawiszy. Jeżeli masz wątpliwości zapoznaj się z kodem źródłowym.