Skip to content

GameDevDoc Menüü
Type to start searching
    Lähtekood
    • GameDevDoc documentation
    Lähtekood
    • Mänguideest teostuseni
    • Teooria
    • Alustamine
    • LibGDX installimine
    • Serveri seadistamine
    • Klient
    • N-mängijate connection
    • Kryo registreerimine
    • Lõplik kaustade/failide hierarhia
    • Basics
    • Mängu näide
    • Animatsioonid
    • Pollimine
    • Input Events
    • Atlas-fail
    • Gradle
    • Gradle Kasutamine IntelliJ-s
    • Server
    • Tulemüür
    • Crowdsec
    • Networking
    • Thread communication
    • Netty
    • Kaart serverisse
    • Klient-server suhtlus
    • Sissejuhatus
    • Demo tutorial: anonchat
    • TalTech server
    • Example-game näidis
    • Turn-based mäng
    • Käigupõhise mängu eripärad
    • Serveri kood
    • Kliendi kood
    • FileIO
    • Välised failid
    • JSON-i parsimine
    • Stage ja Actorid
    • Stage ja Actorite süsteem
    • Graphics
    • LibGDX graafika
    • Kuuliloogika
    • Kuuliloogika
    • Pathfinding
    • AI
    • Füüsika
    • Füüsika
    • Animatsioon
    • Animatsioonid kasutades Spritesheet (LibGDX projekt)
    • Interpolation
    • TiledMap
    • TiledMap seadistamine
    • Koodiosa
    • Objektide parsimine
    • Tile collision
    • Tiled
    • Fog of War
    • Collision
    • Collision
    • Sündmuste käivitamine
    • Sündmuse käivitamine
    • Lobby
    • Lobby loomine
    • Lobby (uus)
    • Sissejuhatus lobbysse
    • Mängija registreerimine
    • Loo uus lobby
    • Lobbyst väljumine
    • Näita lobbyd lobbysse
    • Lobby eemaldamine ekraanilt
    • Lobbysse sisenemine
    • Väljunud mängija eemaldamine ekraanilt
    • Menüü
    • Menüü
      • Ekraani loomine
      • Näide example-game'st
      • Meetodid
    • Item Intecration, Inventory
    • Item Interaction
    • Inventory
    • Audio
    • Heli sissejuhatus
    • Heli lisamine
    • Kauguspõhine heli (distance-based audio)
    • Camera
    • Kaamera: tegelasega kaasa liikumine; zoomimine
    • Viewportid
    • Ekraani suuruse vahetus
    • HUD
    • Muu
    • GitIgnore fail
    • GitLab CI/CD
    • LibGDX Mälu Haldamine
    • AssetManager
    • Power-up
    • Hüpikud ja ülekatted
    • Dialoogisüsteem
    • Nupp
    • Minikaart
    • Cutscene
    • Edetabel
    • Particle effects
    • Koodistruktuur
    • README
    • Materjalid
    • Mänguarenduse õppematerjalid
    • Vabavaralised ressursid

    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.

    • 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 kasutusel render() 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.

    Näide example-game'st¶

    Järgnevas näites on TitleScreen, mis rakendab Stage ja Table komponente menüü loomiseks. Ekraanil on kaks nuppu: “Start” ja “Exit”. Nuppude kaudu saab kas mängu alustada või rakendusest väljuda.

    /**
    * TitleScreen represents the main menu of the game, where players can choose to start the game or exit.
    * It listens for user input and directs user to different screens, for example TitleScreen -> GameScreen.
    */
    public class TitleScreen extends ScreenAdapter {
        private final Stage stage;
    
        public TitleScreen(Game game) {
            stage = new Stage();
    
            // NB! important line - will make the stage listen for user input
            // For example when this is not set no hover or click events will be triggered
            Gdx.input.setInputProcessor(stage);
    
            // menu buttons
            var startButton = getButton(20, "Start", () -> {
                // send a message to the server that the player wants to join the game
                ServerConnection.getInstance().getClient().sendTCP(new GameJoinMessage());
                game.setScreen(new GameScreen(game));
            });
            var exitButton = getButton(20, "Exit", () -> Gdx.app.exit());
    
            // positioning the buttons. you can think of the following as a table (or flexbox) in HTML
            var table = new Table();
            table.setFillParent(true);
            table.add(startButton).padBottom(20);
            table.row();
            table.add(exitButton);
    
            stage.addActor(table);
        }
    
        /**
         * Renders the TitleScreen, clearing it and drawing the buttons.
         *
         * @param delta time since last frame.
         */
        @Override
        public void render(float delta) {
            super.render(delta);
            // clear the screen
            Gdx.gl.glClearColor(192 / 255f, 192 / 255f, 192 / 255f, 1); // to get that win 95 look
            Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    
            // draw the buttons
            stage.act(delta);
            stage.draw();
        }
    
        @Override
        public void resize(int width, int height) {
            super.resize(width, height);
    
            stage.getViewport().update(width, height, true);
        }
    }
    

    Nagu näha, Stage luuakse konstruktoris, Table kasutatakse nuppude paigutamiseks, ning render() meetodis kutsutakse stage.act() ja stage.draw(). Lisaks määratakse Gdx.input.setInputProcessor(stage), et Stage saaks kasutaja sisendit vastu võtta.

    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, joonistab SpriteBatch 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);
    }
    

    Lisaks abistavaid blogisid, tutoriale¶

    • Blogi postitus ekraanide kohta

    • Youtube playlist UI-de kohta ja Scene2d kasutus

    • LibGDX wikis olev tutorial menüü ja ekraanide vahetuste kohta

    • Näidismäng

    "Previous" Väljunud mängija eemaldamine ekraanilt
    "Next" Interaktiivsete esemete lisamine ja integreerimine
    © Copyright 2025.
    Created using Sphinx 9.0.4. and Material for Sphinx