LibGDX – Konfiguracja i pierwszy screen
Konfiguracja LibGDX: https://github.com/libgdx/libgdx/wiki/Setting-up-your-Development-Environment-(Eclipse,-Intellij-IDEA,-NetBeans)
Instalator: https://github.com/libgdx/libgdx/wiki/Project-Setup-Gradle
O ViewPortach: https://github.com/libgdx/libgdx/wiki/Viewports
SourceTree do pobrania: https://www.sourcetreeapp.com/
Pamiętajcie, że film ma na celu pokazanie całej otoczki – od planowania, przez commitowanie, naprawienie błędów etc. Nie przepisujcie kodu z filmiku. Macie stan kodu z tego filmiku dostępny na Githubie.
Kod źródłowy do pobrania: https://github.com/JavaDevMatt/tutorialclicker/tree/tut2
Co robiliśmy w tym materiale?
Wygenerowaliśmy pusty projekt i zaczęliśmy pisać kod
W filmiku pokazałem jak korzystać z instalatora, który generuje pusty projekt w LibGDX.
Link do instalatora: https://github.com/libgdx/libgdx/wiki/Project-Setup-
Szczegóły konfiguracji środowiska: https://github.com/libgdx/libgdx/wiki/Setting-up-your-Development-Environment-(Eclipse,-Intellij-IDEA,-NetBeans)
Napisaliśmy klasę TutorialClickerGame
Klasa ma stałe, które będziemy wykorzystywać w naszym projekcie. W metodzie create() odpalamy nasz SplashScreen. Flaga „paused” będzie na w przyszłości potrzebna, by sprawdzić czy gra jest aktywna, czy jest np. gdzieś w tle.
package pl.javadevmatt.tutorialclicker; import pl.javadevmatt.tutorialclicker.screens.SplashScreen; import com.badlogic.gdx.Game; public class TutorialClickerGame extends Game { public final static String GAME_NAME = "Tutorial Clicker"; public final static int WIDTH = 480; public final static int HEIGHT = 700; private boolean paused; @Override public void create () { this.setScreen(new SplashScreen(this)); } /** * --------------------- * getters and setters * */ public boolean isPaused() { return paused; } public void setPaused(boolean paused) { this.paused = paused; } }
Skonfigurowaliśmy nasz DesktopLauncher
Prosta konfiguracja okna desktopowego. Rozmiary, tytuł i ustawienie flagi resizable na false.
package pl.javadevmatt.tutorialclicker.desktop; import com.badlogic.gdx.backends.lwjgl.LwjglApplication; import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration; import pl.javadevmatt.tutorialclicker.TutorialClickerGame; public class DesktopLauncher { public static void main (String[] arg) { LwjglApplicationConfiguration config = new LwjglApplicationConfiguration(); config.title = TutorialClickerGame.GAME_NAME; config.width = TutorialClickerGame.WIDTH; config.height = TutorialClickerGame.HEIGHT; config.resizable = false; new LwjglApplication(new TutorialClickerGame(), config); } }
Napisaliśmy abstrakcyjny ekran
Klasa, po której będą dziedziczyć wszystkie ekrany w grze. Zawiera scenę „Stage”, kamerę i SpriteBatch na którym będziemy rysować. Zawiera metody, które inicjalizują poszczególne pola. Metoda render czyści ekran, zajmuje się kamerą i spritebatch.
package pl.javadevmatt.tutorialclicker.screens; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Screen; import com.badlogic.gdx.graphics.GL20; import com.badlogic.gdx.graphics.OrthographicCamera; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.scenes.scene2d.Stage; import com.badlogic.gdx.utils.viewport.StretchViewport; import pl.javadevmatt.tutorialclicker.TutorialClickerGame; public abstract class AbstractScreen implements Screen{ protected TutorialClickerGame game; protected Stage stage; private OrthographicCamera camera; protected SpriteBatch spriteBatch; public AbstractScreen(TutorialClickerGame game){ this.game = game; createCamera(); stage = new Stage(new StretchViewport(TutorialClickerGame.WIDTH, TutorialClickerGame.HEIGHT, camera)); spriteBatch = new SpriteBatch(); Gdx.input.setInputProcessor(stage); } private void createCamera() { camera = new OrthographicCamera(); camera.setToOrtho(false, TutorialClickerGame.WIDTH, TutorialClickerGame.HEIGHT); camera.update(); } @Override public void render(float delta) { clearScreen(); camera.update(); spriteBatch.setProjectionMatrix(camera.combined); } @Override public void show() {} private void clearScreen() { Gdx.gl.glClearColor(0, 0, 0, 0); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); } @Override public void resume() { game.setPaused(false); } @Override public void pause() { game.setPaused(true); } @Override public void hide() {} @Override public void dispose() { game.dispose(); } @Override public void resize(int width, int height) { } }
Napisaliśmy klasę SplashScreen
Klasa, która wyświetla obrazek naszego SplashScreena.
package pl.javadevmatt.tutorialclicker.screens; import pl.javadevmatt.tutorialclicker.TutorialClickerGame; import com.badlogic.gdx.graphics.Texture; public class SplashScreen extends AbstractScreen{ private Texture splashImg; public SplashScreen(TutorialClickerGame game) { super(game); init(); } private void init() { // TODO implement better assets loading when game grows splashImg = new Texture("badlogic.jpg"); } @Override public void render(float delta) { super.render(delta); spriteBatch.begin(); spriteBatch.draw(splashImg, 0, 0); spriteBatch.end(); } }