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
    • 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
    • Stage ja Actorid
    • Stage ja Actorite süsteem
    • Graphics
    • LibGDX graafika
    • Materjalid
    • Mänguarenduse õppematerjalid
    • Kuuliloogika
    • Kuuliloogika
    • Netty
    • Netty
    • Networking
    • Tutvustus
    • Pathfinding
    • AI
    • Kaart serverisse
    • Mängukaardi lisamine serverisse
    • Füüsika
    • Füüsika
    • Animatsioon
    • Animatsioonid kasutades Spritesheet (LibGDX projekt)
    • 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
      • Meetodid
      • Lisaks abistavaid blogisid, tutoriale
    • Edetabel
    • Edetabel
    • Button
    • Nupu loomine
    • TextButton
    • ImageButton
    • ImageTextButton
    • Nupule funktsionaalsuse lisamine
    • 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
    • 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.

    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

    "Previous" Lobby (uus)
    "Next" Edetabel
    © Copyright 2025.
    Created using Sphinx 5.3.0. and Material for Sphinx