Menüü¶
Ekraani loomine¶
Main menu ja ka igasuguste teiste screenide jaoks tuleks klassi implementeerida Screen
liides (interface).
Sellega lisanduvad meetodid nagu show()
, render()
, resize()
, pause()
, resume()
, hide()
ja dispose()
.
public class MenuScreen implements Screen {
private Stage stage;
private final Skin skin;
private SpriteBatch batch;
private ExtendViewport viewport;
public MenuScreen() {
// Constructor logic
}
@Override
public void render(float delta) {
// Called for rendering screen
}
@Override
public void resize(int width, int height) {
// Called when window has been resized
}
@Override
public void show() {
// Called when this screen becomes the current screen
}
@Override
public void hide() {
// Called when this screen is no longer the current screen
}
@Override
public void pause() {
// Called when the application is paused
}
@Override
public void resume() {
// Called when the application is resumed from paused state
}
@Override
public void dispose() {
// Clean up resources when the screen is no longer needed
}
}
Lisaks on vaja LibGDX poolt antud Scene2d, mis lihtsustab igasuguste mängu kasutajaliideste (UI), atribuute, mida meetodites kasutada nagu:
- Lava (
Stage
) - Mis hõlmab kõiki kasutajaliidese (UI) komponente nagu nupud, tabelid jms. Kasutus: Lood lava (
stage
), kuhu lisada oma ekraani komponendid.
- Lava (
Skin
- Vajalik UI (kasutajaliidese) komponentide stiili korrigeerimiseks. See pakub ressursse nagu erinevad tekstuurid, fontid, värvid ning ka muud visuaalsed vahendid.Kasutus:
Skin
-ile peab lisama kas JSON faili, texture atlase või muu stiili kohta sisaldavat infot ning edaspidi saab seda erinevate komponentide stiliseerimiseks kasutada.
SpriteBatch
- Tekstuuride, kujundite ja muu 2D-graafika “joonistamiseks” ekraanile. Oluline nt taustapiltide renderdamiseks.Kasutus: Defineerida
SpriteBatch
instance ja kasutuselrender()
meetodi sees.
- Vaateava (
Viewport
) - Pole otseselt vajalik, kuid väga soovitatav akna suuruse muutmiseks ja erinevateks kuvasuheteks (aspect ratio). Kasutus:
Viewport
luuakse ja antakse lavale (stage
) initsialiseerimise ajal.
- Vaateava (
Meetodid¶
show()
- Initsialiseerib hetkese ekraani koos lava (stage
), vaateava (viewport
), kasutajaliidese (UI) komponentide ja muuga. Kasulik oleks selle jaoks teha abistavaid meetodeid näiteks nuppude lisamiseks, muidu läheb meetod pikaks kui iga nupu konfiguratsioon sinna lisada. Näiteks:
@Override
public void show() {
viewport = new ExtendViewport(1280, 720);
stage = new Stage(viewport);
spriteBatch = new SpriteBatch();
backgroundTexture = new Texture(Gdx.files.internal("menubackground.jpg"))
// Table for the buttons visible on screen.
buttonTable = new Table();
buttonTable.setFillParent(true);
stage.addActor(buttonTable);
// Buttons and logic ... //
Gdx.input.setInputProcessor(stage);
render()
- Lähtestab hetkese ekraani, et järgmist joonistada. Vastutab igal kaadril (frame) ekraani, nuppude jne renderdamise eest, joonistabSpriteBatch
abil lava (stage
). Näiteks:
@Override
public void render(float delta) {
// clear the screen ready for next set of images to be drawn
Gdx.gl.glClearColor(.1f, .1f, .15f, 1); // screen color
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
// Draw the background image
spriteBatch.setProjectionMatrix(stage.getCamera().combined);
spriteBatch.begin();
spriteBatch.draw(backgroundTexture, 0, 0, stage.getWidth(), stage.getHeight());
spriteBatch.end();
// tell our stage to do actions and draw itself
stage.act(Math.min(Gdx.graphics.getDeltaTime(), 1 / 30f));
stage.draw();
resize()
- Kutsutakse välja ekraani suuruse muutmisel ning värskendab lava (stage
) ja vaateava (viewport
) vastavalt uuele suurusele.pause()
- Kasutusel mängu ajal, et mängu peatada nt esc nuppu vajutades.resume()
- Meetod mängu jätkamiseks.hide()
- Saab kasutada selleks, kui ekraani enam ei kuvata, hea näiteks ressursside puhastamiseks või käimasolevate tegevuste peatamiseks.dispose()
- Kutsutakse välja kui seda ekraani pole enam vaja, nagu mängu kinnipanekul. Eemaldab kasutatavad ressursid, nagu tekstuurid, lavad (stage
) ja muu ehk tagab korraliku “puhastuse” selleks, et ei tekiks mälulekkeid või üleüldist ressursside raiskamist. Näiteks
@Override
public void dispose() {
stage.dispose();
backgroundTexture.dispose();
spriteBatch.dispose();
Gdx.input.setInputProcessor(null);
}