LibGDX – Refactor i nowa grafika
W tym odcinku posprzątaliśmy trochę klasę GameplayScreen i dodaliśmy nową grafikę.
Kod źródłowy lekcji: https://github.com/JavaDevMatt/tutorialclicker/tree/tut8
Klasa GameplayScreen
package pl.javadevmatt.tutorialclicker.screens;
import com.badlogic.gdx.graphics.Texture;
import pl.javadevmatt.tutorialclicker.TutorialClickerGame;
import pl.javadevmatt.tutorialclicker.entities.Player;
import pl.javadevmatt.tutorialclicker.ui.IClickCallback;
import pl.javadevmatt.tutorialclicker.ui.PlayerButton;
import pl.javadevmatt.tutorialclicker.ui.ResetScoreButton;
import pl.javadevmatt.tutorialclicker.ui.ScoreLabel;
public class GameplayScreen extends AbstractScreen{
private Texture bgTexture;
private Player player;
private PlayerButton playerButton;
private ResetScoreButton resetScoreButton;
private ScoreLabel scoreLabel;
public GameplayScreen(TutorialClickerGame game) {
super(game);
}
@Override
protected void init() {
bgTexture = new Texture("bg.png");
initPlayer();
initPlayerButton();
initResetScoreButton();
initScoreLabel();
}
private void initResetScoreButton() {
resetScoreButton = new ResetScoreButton(new IClickCallback() {
@Override
public void onClick() {
game.resetGameScore();
}
});
stage.addActor(resetScoreButton);
}
private void initScoreLabel() {
scoreLabel = new ScoreLabel();
stage.addActor(scoreLabel);
}
private void initPlayerButton() {
playerButton = new PlayerButton(new IClickCallback() {
@Override
public void onClick() {
player.reactOnClick();
game.addPoint();
}
});
stage.addActor(playerButton);
}
private void initPlayer() {
player = new Player();
stage.addActor(player);
}
@Override
public void render(float delta) {
super.render(delta);
update();
spriteBatch.begin();
spriteBatch.draw(bgTexture, 0, 0);
spriteBatch.end();
spriteBatch.begin();
stage.draw();
spriteBatch.end();
}
private void update() {
scoreLabel.setText("Score: " + game.getPoints());
stage.act();
}
}
IClickCallback
package pl.javadevmatt.tutorialclicker.ui;
public interface IClickCallback {
void onClick();
}
PlayerButton
package pl.javadevmatt.tutorialclicker.ui;
import com.badlogic.gdx.scenes.scene2d.InputEvent;
import com.badlogic.gdx.scenes.scene2d.ui.Button;
import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
public class PlayerButton extends Button{
public PlayerButton(final IClickCallback callback){
super(new ButtonStyle());
init(callback);
}
private void init(final IClickCallback callback) {
this.setWidth(460);
this.setHeight(360);
this.setX(10);
this.setY(170);
this.addListener(new ClickListener(){
@Override
public boolean touchDown(InputEvent event, float x, float y,
int pointer, int button) {
callback.onClick();
return super.touchDown(event, x, y, pointer, button);
}
});
}
}
ResetScoreButton
package pl.javadevmatt.tutorialclicker.ui;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.g2d.TextureAtlas;
import com.badlogic.gdx.scenes.scene2d.InputEvent;
import com.badlogic.gdx.scenes.scene2d.ui.Button;
import com.badlogic.gdx.scenes.scene2d.ui.Skin;
import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
public class ResetScoreButton extends Button{
public ResetScoreButton(final IClickCallback callback){
super(prepareResetButtonStyle());
init(callback);
}
private void init(final IClickCallback callback) {
this.setWidth(100);
this.setHeight(100);
this.setX(330);
this.setY(560);
this.addListener(new ClickListener(){
@Override
public boolean touchDown(InputEvent event, float x, float y,
int pointer, int button) {
callback.onClick();
return super.touchDown(event, x, y, pointer, button);
}
});
}
private static ButtonStyle prepareResetButtonStyle() {
TextureAtlas atlas = new TextureAtlas(Gdx.files.internal("ui-red.atlas"));
Skin skin = new Skin(atlas);
ButtonStyle buttonStyle = new ButtonStyle();
buttonStyle.up = skin.getDrawable("button_02");
buttonStyle.down = skin.getDrawable("button_03");
return buttonStyle;
}
}
ScoreLabel
package pl.javadevmatt.tutorialclicker.ui;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.scenes.scene2d.ui.Label;
public class ScoreLabel extends Label{
public ScoreLabel(){
super("", prepareLabelStyle());
init();
}
private void init() {
this.setX(70);
this.setY(650);
}
private static LabelStyle prepareLabelStyle() {
LabelStyle labelStyle = new LabelStyle();
labelStyle.font = new BitmapFont();
return labelStyle;
}
}
