LibGDX graafika¶
LibGDX Graphics moodul annab infot seadme ekraani või rakenduse akna kohta ning pakub ligipääsu OpenGL kontekstile.
Graafikamooduli kaudu saab teada:
ekraani suuruse (getWidth(), getHeight())
pikslite tiheduse (dpi)
akna värskendussageduse (fps)
viimase kaadri kestuse (getDeltaTime())
täisekraani ja akna seadistused
kaadripuhvri seadistused (värvisügavus, stencil, depth buffer)
Täpsem info: https://libgdx.com/wiki/graphics/graphics
Näidisprojekt¶
Näidisprojekti repo: https://gitlab.cs.ttu.ee/reramm/libgdx-graphics
Järgnev materjal selgitab LibGDX Graphics mooduli põhifunktsioone selle repo koodi põhjal.
Näidisprojekt on lihtne rakendus, kus ruut liigub aknas, põrkub servadest tagasi ja muudab seejuures värvi. Selleks kasutatakse mõnda põhifunktsiooni LibGDX Graphics moodulist. Kood on kommenteeritud eesti- ja inglise keeles.
Näidisprojekt sisaldab 3 klassi: MyGdxGame, Ruut ja Hex.
Ruut objekti loomine¶
Klassis MyGdxGame luuakse Ruut objekti instants ning antakse konstruktorile argumendiks
ruudu esialgne asukoht Vector2 kujul:
ruut = new Ruut(new Vector2(100, 0));
Vector2 on LibGDX matemaatikamooduli klass kahemõõtmeliste koordinaatide hoidmiseks.
Täpsem info: https://libgdx.com/wiki/math-utils/vectors-matrices-quaternions
Ruut klassi loogika¶
Ruut klass sisaldab loogikat ruudu liikumise, põrkumise ja värvi
muutmise jaoks.
Meetod uuenda() muudab ruudu positsiooni nii, et selle liikumise kiirus ei sõltu kaadri
renderdamise kiirusest (fps). Selleks kasutatakse Gdx.graphics.getDeltaTime(), mis tagastab
möödunud aja viimase kaadri renderdamisest.
Kui ruudu positsiooni muutmisel kiirus korrutada läbi getDeltaTime() tulemusega,
liigub ruut alati sama keskmise kiirusega, olenemata kaadrite renderdamise kiirusest:
positsioon += Gdx.graphics.getDeltaTime() * kiirus * suundX;
public void uuenda(float delta) {
if (positsioon.x + spriit.getWidth() >= Gdx.graphics.getWidth()) suundX = Porka(suundX);
else if (positsioon.x <= 0) suundX = Porka(suundX);
if (positsioon.y + spriit.getHeight() >= Gdx.graphics.getHeight()) suundY = Porka(suundY);
else if (positsioon.y <= 0) suundY = Porka(suundY);
positsioon.x += delta * kiirus * suundX;
positsioon.y += delta * kiirus * suundY;
}
Põrkumine akna servadega¶
Sama uuenda() meetod kontrollib, kas ruut on jõudnud akna servani.
Selleks kasutatakse Gdx.graphics meetodeid:
getWidth()— tagastab akna laiuse pikslitesgetHeight()— tagastab akna kõrguse pikslites
Neid meetodeid kasutatakse ruudu ja akna laiuse ja kõrguse leidmiseks. Kasutades nendest meetoditest saadud infot saame ruudu liikumise piirata akna raamesse.
Täpsem info meetodite kohta: https://libgdx.com/wiki/graphics/graphics
Värvi muutmine¶
Ruudu liikumise suuna muutmiseks peale akna serva vastu põrkamist ja
ruudu värvi muutmiseks kasutatakse meetodit porka(int suund):
private int porka(int suund) {
spriit.setColor(Color.valueOf(varviGeneraator.SuvalineVarv()));
return suund * -1;
}
See meetod kasutab LibGDX Color klassi, mis võimaldab:
kasutada sisseehitatud värve (nt
Color.GREEN)või luua värvi HEX-koodist:
Color.valueOf("#00FF00")
Juhuslikud HEX-värvid genereerib abiklass Hex, mille meetod suvalineVarv() tagastab
juhusliku kuueteistkümnendarvu kujul (nt #3fa2c1):
public String suvalineVarv() {
Random random = new Random();
int nextInt = random.nextInt(0xffffff + 1);
String colorCode = String.format("#%06x", nextInt);
return colorCode;
}
Värvi muutus annab visuaalse tagasiside igast põrkest.
Täpsem info Color klassi kohta: https://libgdx.com/wiki/graphics/2d/fonts/color-markup-language