Witam wszystkich czytelników, dziś przy tak pięknych wiosennych promieniach słońca i blasku księżyca, zajmiemy się stworzeniem obszaru reprezentującego w przyszłości teren naszej bazy. Głównie będzie chodziło o zwiększanie punktów życia za przebywanie w strefie wyznaczonej jako baza. Życie będzie zwiększane o jeden punkt co jedna sekundę spędzoną w tym obszarze. Ten teren będzie oznaczony zielonym prostokątem.
Zacznijmy od narysowania na naszej mapie prostokąta wypełnionego zielonym kolorem.
private Texture home;
Dodajemy nową zmienną, która będzie odpowiedzialna za przechowywanie zielonego prostokąta.
pixmap = new Pixmap(200,200, Pixmap.Format.RGBA8888); pixmap.setColor(Color.GREEN); pixmap.fillRectangle(0,0,200,200); home = new Texture(pixmap); pixmap.dispose();
Następnie jak z poprzednimi elementami, rysowanymi na ekranie postępujemy i tym razem. Obszar bazy na chwilę obecną będzie wielkości 200px na 200px. Teraz pozostaje już tylko wyświetlić na ekranie naszą zmienną klasy Texture, czynimy to w nadpisywanej metodzie render().
batch.draw(home,2400,2400, home.getWidth(),home.getHeight());
Uzyskaliśmy dokładnie taki efekt jaki założyliśmy na początku. Teraz pozostaje zająć się zwiększeniem życia w chwili, kiedy bohater spędził dłuższy czas niż 1s w bazie. Uwzględniamy fakt, że gdy wyjdzie z tego obszaru zmienna licząca czas jest zerowana.
private float timeHome;
Zatem zaczynamy od utworzenia zmiennej, która będzie odpowiedzialna za trzymanie czasu, a następnie przejdźmy do metody create().
timeHome = 0;
W której zerujemy wartość naszej nowej zmiennej. Czas na kod odpowiedzialny za inkrementację (zwiększenie o 1) poziomu życia bohatera.
if(player.x > 2400 && player.x < 2600){ if(player.y > 2400 && player.y < 2600){ if(player.getHp() < 100){ timeHome += Gdx.graphics.getDeltaTime(); if(timeHome > 1){ player.setHp(player.getHp() + 1); timeHome = 0; } } }else{ timeHome = 0; } }else{ timeHome = 0; }
Zatem sprawdzamy na początek w 2 pierwszych warunkach czy bohater znajduję się w obszarze naszej bazy, jeśli tak to sprawdzany jest kolejny warunek, czy życie bohatera jest mniejsze od 100. W chwili gdy mamy spełniony warunek, następuje dodanie różnicy czasu między ostatnią, a obecną klatką, zapisywaną w zmiennej timeHome. W chwili gdy zsumowany czas jest większy od 1s, następuje zwiększenie życia o 1pkt i wyzerowanie czasu. Wyzerowanie również następuje w chwili, kiedy gracz opuści obszar bazy.
Screen wyświetlający w konsoli, efekt działania naszego nowego kodu. Jak widzimy co 1 sekundę następuje zwiększenie o jeden punkt życia naszego bohatera.
Podsumowanie
Dziś udało się nam stworzyć prowizoryczną, ale działającą według założeń bazę, której obecnym zadaniem jest zwiększanie punktów życia naszego bohatera. W kolejnym wpisie związanym z grą zajmiemy się stworzeniem interfejsy.
Na dziś to wszystko, pragnę jeszcze zaznaczyć, że zdjęcie wyróżniające wpis przedstawia Zamek w Niedzicy (mam do tego miejsca pewien sentyment).
Pozdrawiam,
sirmarbug