Kod przykładu został utworzony w DELPHI + OMEGA.

Poniżej spodziewany efekt rozwiązania:

Powiedzmy, że mamy obiekty w naszej grze, które cechują się różną maksymalną wartością punktów życia początkowego, a chcemy otrzymać jednolite długości pasków, to znaczy wyeliminować taką sytuację jak na poniższym rysunku:

Aby długości pasków były znormalizowane do pewnej ustalonej wartości należy:
a) wybrać tę wartość (w przykładzie wybrałem 32)
b) przeskalować punkty stanu życia – linia zielona
c) uzupełnić brakujące punkty życia (linia czerwona) do przyjętej wartości – tu 32

Tak więc mamy gotowy przepis. Fragment kodu, który to wykonuje przedstawiam poniżej

Do rysowania linii posłużyła procedura LineH komponentu OmegaScreen. Jej parametry to
– współrzędna X początku linii
– współrzędna X końca linii
– współrzędna Y linii
– kolejne to składowe kolorów (czerwona, zielona, niebieska)
– ostatnia to wartość grubości linii

Teraz należy się zastanowić w którym momencie wywoływać ten kod?
Jeśli linia życia ma się pokazać dla każdego widocznego i żyjącego obiektu, to nasuwa się prosty pomysł, aby zrobić to w pętli po utworzonych obiektach. Niestety nie będzie, to najwłaściwsze podejście. Utworzymy bowiem dodatkową pętle…Szkoda będzie na nią czasu.

Postąpimy inaczej. Nasze duszki są klasą TSprite. Rysowanie tej klasy w OMEDZE zajmuje się procedura Draw komponentu OmegaSprite, która jest cyklicznie wywołana w zegarze aplikacji. Tak więc rysowanie linii życia duszka umieścimy w jego procedurze Draw, tak jak poniżej

Dodatkowo w przykładzie można ukryć / pokazać linie jeśli z klawiatury klawiszem „i” zmienimy flagę rysowania fPokaz na false.

Można linie życia rysować również i w taki sposób, że wykorzystujemy gotowe bitmapy. Ale stracimy na prędkości. Pytanie dlaczego? Dlatego, że każda taka bitmapa linii będzie pochodną klasy TSprite (dla każdego obiektu musimy utworzyć zieloną i czerwoną bitmapę linii lub kolejne klatki takich linii), a takie utworzenie równoznaczne jest z wykonywaniem dla tych linii procedur Move, Draw, Dead (bo to też duszki).

I to by było na tyle. Pozostałe procedury są obudową tego przykładu.

Pozdrawiam oksal

Autor: oksal

Załączniki