fizyka wzory prawa zadania teoria, chemia teoria zadania wzory, modelarstwo szkutnicze

 
omega

Pobierz kod PASEKZYCIA

Jak zrobić pasek stanu życia w grze 2D?

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

Poniżej spodziewany efekt rozwiązania

tworzenie gier 2d pasekzycia


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

tworzenie gier 2d pasekzycia 1


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



procedure TGracz.RysujPasekZycia;
var
dx:integer;
begin
//przechwyć wcisnięcie klawisza "I"
if oisbutton2 in Form1.OmegaInput1.keyboard.statesclicked then
fPokaz:=not fPokaz;
ifnot fPokaz then exit;
//rozpocznij proces rysowania paskow zycia
//normuj do długosci 32 pikseli
dx:=round(Zycie*32/Zycie0);
//czerwona linia
Form1.OmegaScreen1.LineH(Round(x+dx),Round(x+32),Round(y),200,0,0,2);
//zielona linia
Form1.OmegaScreen1.LineH(Round(x),Round(x+dx),Round(y),0,125,0,2);
end;




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



procedure TGracz.Draw;
begin
inherited Draw;
RysujPasekZycia;
end;




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.

KONIEC

Alkomat- wirtualny test

Alkomat- darmowa aplikacja na Androida

Pobierz ze sklepu Google Play
Olinowanie stałe- kalkulator średnic

Olinowanie stałe- darmowa aplikacja na Androida

Pobierz ze sklepu Google Play
przepis na gogfry

Przepis na gofry

zobacz
przepis na bitą śmietanę

Przepis na bitą śmietanę

zobacz