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();
}
}
