Skip to content

GameDevDoc Menüü
Type to start searching
    Lähtekood
    • GameDevDoc documentation
    Lähtekood
    • Mänguideest teostuseni
    • 1. Sissejuhatus
    • 2. Sisend ja tagasiside
    • 3. Kasutajaliides
    • 4. Mängureeglid ja mängumehaanikad
    • 5. Mängureeglite ja mängumehaanikate disainiprotsess
    • 6. Testimine, itereerimine ja silumine
    • Kuidas alustada
    • Sissejuhatus
    • Klient
    • N-mängijate connection
    • Kryo registreerimine
    • Lõplik kaustade/failide hierarhia
    • LibGDX Install
    • LibGDX installimine
    • Basics
    • Mängu näide
    • Animatsioonid
    • Delta Time
    • Pollimine
    • Pollimine reaalses mängus
    • Input Events
    • Atlas-fail
    • Readme
    • README kirjutamine
    • Serveri seadistamine
    • Tulemüür
    • Crowdsec
    • Klient-server suhtlus
    • 1. Sissejuhatus
    • 2. Demo tutorial: anonchat
    • 3. TalTech server
    • Turn-based mäng
    • Käigupõhise mängu eripärad
    • Serveri kood käigupõhiseks virtuaalseks lauamänguks
    • Kliendi kood käigupõhiseks virtuaalseks lauamänguks
    • FileIO
    • Välised failid
    • JSON-i parsimine
    • Gradle
    • Gradle Kasutamine IntelliJ-s
    • Koodi Struktuur
    • Projekti struktuur
    • Mängu struktuur
    • Info saatmine
    • Mängu "Flow diagram"
    • Stage ja Actorid
    • Stage ja Actorite süsteem
    • Readme
    • Kuidas luua dialoogisüsteemi
    • Graphics
    • LibGDX graafika
    • Materjalid
    • Mänguarenduse õppematerjalid
    • Kuuliloogika
    • Kuuliloogika
    • Netty
    • Netty
    • Networking
    • 1. Sissejuhatus ning tehnoloogia valik
    • 2. Klient-server mudel ja rollijaotus mängus
    • 3. Mängu arhitektuur
    • 4. Probleemid ja optimeerimine
    • 5. Võimalused Javas kliendi-serveri loomiseks
    • 6. Võrgupõhimõtted ja protokollid
    • 7. Kliendi ja Serveri realiseerimine
    • 8. Paketid ja andmeedastus
    • 9. Pakettide töötlemine serveris
    • Pathfinding
    • AI
    • Kaart serverisse
    • Mängukaardi lisamine serverisse
    • Füüsika
    • Füüsika
    • Animatsioon
    • Animatsioonid kasutades Spritesheet (LibGDX projekt)
    • Cutscenes
    • Kuidas luua vaheklippe (cutscene)
    • Thread communication
    • LibGDX postRunnable interface
    • Mäluhaldus
    • LibGDX Mälu Haldamine
    • TiledMap
    • 1. Mis on Tiled
    • 2. Tiled'i seadistamine
    • 3. Koodiosa
    • 4. Kuidas objekte parsida
    • Tile collision
    • Tiled
    • Fog of War
    • Collision
    • Collision
    • Lobby
    • Lobby loomine
    • Lobby (uus)
    • Lobby (uus)
    • 1. Sissejuhatus
    • 2. Mängija registreerimine
    • 3. Loo uus lobbi
    • 4. Lobbist väljumine
    • 5. Näita lobbid
    • 6. Lobbi eemaldamine ekraanilt
    • 7. Lobbi sisenemine
    • 8. Väljunud mängija eemaldamine ekraanilt
    • Menüü
    • Menüü
      • Ekraani loomine
      • Näide example-game'st
      • Meetodid
      • Lisaks abistavaid blogisid, tutoriale
    • Edetabel
    • Edetabel
    • Button
    • Nupu loomine
    • Skin ja Font
    • TextButton
    • ImageButton
    • ImageTextButton
    • Nupule funktsionaalsuse lisamine
    • Teised UI elemendid
    • Lõpetuseks
    • Item Intecration
    • Korjatavate asjade kaardile lisamine ja integreerimine
    • Inventory
    • Inventory
    • Power-up
    • Power-up
    • Power-up
    • Mis on HUD?
    • Kuidas luua HUD?
    • Tulemus
    • HUD meie näidismängust
    • Lisainfo
    • Hüpikud ja ülekatted
    • Hüpikud ja ülekatted
    • Audio
    • Audio
    • Heli lisamine
    • Muusika juhtimise klassi loomise näide
    • Lisainfo ja assets
    • Kauguspõhine heli (distance-based audio)
    • Interpolation ehk Actorite animatsioon
    • Interpolation
    • Particle effects
    • Particle effects
    • AssetManagement
    • AssetManager
    • Screen Resize
    • Ekraani suuruse vahetus
    • Viewports
    • Viewportid
    • Camera
    • Kaamera: tegelasega kaasa liikumine; zoomimine
    • Free Resources
    • Vabavaralised ressursid
    • .gitignore
    • GitIgnore fail
    • GitLab CI/CD
    • GitLab CI/CD

    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" Lobby (uus)
    "Next" Edetabel
    © Copyright 2025.
    Created using Sphinx 8.2.3. and Material for Sphinx