I za kraj ove igre sacuvali smo "nestajanje" polja. Nestajanje cemo izvesti tako sto cemo alpha vrednos materiala polako smanjivati dok materijal ne postane potpuno providan. Da bi alpha vrednos uopste menjala providnost materiala moramo Blend mode postaviti na Transparency i zato postavimo to za sve materiale koje smo definisali osim za material Pozadina. Problem bi bio ako bismo menjali material Pozadina sva polja bi se menjala jer smo pri kreiranju kocku koja crta okvir polja povezali sa Pozadina materijalom. Zato cemo kreirati jos jedan material "FadeOut" i napraviti ga isto kao i Pozadina osim sto ce FadeOut imati Blend mode = Transparency. Dodacemo jos dve globalne promenljive u kojima cemo cuvati materijale koje menjamo
var
MatBoja, MatFade: TGLMaterial;
MatFade mozemo postaviti na "FadeOut" material prilikom kreiranja forme
procedure TForm1.FormCreate(Sender: TObject);
begin
Randomize;
// Postavlja polja na tablu
NovaIgra;
// Uzima material za "nestajanje" polja
MatFade := GLMaterialLibrary1.LibMaterialByName('FadeOut').Material;
end;
Materijal boje koja treba da nestane mozemo uzeti u funkciji Proveri
procedure TForm1.Proveri;
begin
// Ako su boje iste vreme je za "nestajanje" :)
Nestajanje :=
TGLCube(Izabrana1.Children[1]).Material.LibMaterialName =
TGLCube(Izabrana2.Children[1]).Material.LibMaterialName;
// Ako nisu ista onda ih vracamo
Vracanje := not Nestajanje;
if Nestajanje then
begin
// Postavljamo material za nestajanje
TGLCube(Izabrana1.Children[0]).Material.LibMaterialName := 'FadeOut';
TGLCube(Izabrana2.Children[0]).Material.LibMaterialName := 'FadeOut';
// Uzimamo materijal za boju kako bismo mogli
// polako da ga napraimo providnim
MatBoja := GLMaterialLibrary1.LibMaterialByName(
TGLCube(Izabrana1.Children[1]).Material.LibMaterialName).Material;
end;
end;
Kao sto vidite u proceduri proveri takodje postavljamo material FadeOut za okvire polja koje treba da nestanu. Tako cemo moci samo njih da menjamo.
Sada cemo jos samo da izmenimo deo OnProgress eventa za Nestajanje
if Nestajanje then
begin
// Smanjujemo alpha vrednost tako da pozadina postaje sve
// providnija
MatFade.FrontProperties.Diffuse.Alpha :=
MatFade.FrontProperties.Diffuse.Alpha - 1 * deltaTime;
// Smanjujemo alpha vrednost tako da boja postaje sve
// providnija
MatBoja.FrontProperties.Diffuse.Alpha :=
MatBoja.FrontProperties.Diffuse.Alpha - 1 * deltaTime;
// Malo da vrtimo polja dok nestaju ;)
Izabrana1.Turn(1000 * deltaTime);
Izabrana2.Turn(1000 * deltaTime);
// Ako je sve nevidnjivo brisemo polja
if MatFade.FrontProperties.Diffuse.Alpha <= 0 then
begin
Izabrana1.Free;
Izabrana2.Free;
Izabrana1 := nil;
Izabrana2 := nil;
// Vracamo ponovo alpha na 1
MatFade.FrontProperties.Diffuse.Alpha := 1;
MatBoja.FrontProperties.Diffuse.Alpha := 1;
Nestajanje := False;
// Nema vise polja... nova igra!?
if Tabla.Count = 0 then
if Application.MessageBox('Nova igra?', 'Info', MB_YESNO) = ID_YES then
NovaIgra
else
Application.Terminate;
end;
end;
Znaci sve sto radimo je polako zmanjivanje alpha vrednosti boje materijala i nase polje ce polako da nestaje. Dodao sam i malo rotiranja kako bi sve bilo zanimljivije
Kada objekat skroz nestane (alpha <= 0) brisemo ga i vracamo alpha vrednos materijala za nestajanje ponovo na 1 kako bi bio spreman za sledece nestajanje.
I to je sve za ovu igru.
Mozete dodati da se meri vreme za koje je igra predjena, broj okretanja, highscore tabelu, izbor slika za polja (polja mogu da imaju texture)... slobodno experimentisite
Sledece sto nas ceka su "ponasanja" objekata... teracemo objekat da se krece po nekoj putanji, vrtecemo tocak na osovini... videcu sta ce mi sve pasti na pamet





Re: Kako koristiti GLScene
Re: Kako koristiti GLScene