Libgdx, hjälp: Imagebutton -> ArrayList -> Table <- ScrollPane

Permalänk

Libgdx, hjälp: Imagebutton -> ArrayList -> Table <- ScrollPane

Hej! Ursäkta om rubriken är lite luddig...

Jag behöver hjälp med programmeringen av en speciell levelselect klass till ett spel som jag och några andra håller på att skapa. Problemet som jag har är att jag försöker få Imagebuttons (bildknappar som är nerskalade bilder av kartor ifrån spelet) till en Arraylist som senare tillsätts i en Table som går att scrolla horisontellt med en Scrollpane. (med hjälp av api'n Libgdx).

Hur ska jag göra så att detta fungerar, alla olika exempel och ideer uppskattas!

Problem som uppstår i det som jag har skrivit:
-Blir bara textknappar istället för bildknappar...
-Inget mellan rum på knapparna i tablet...

Tack för svar!

Kod som jag skrivit (vissa grejer är oviktiga i koden och vissa grejer hör ihop med andra klasser såsom LOADING_SCREEN):
-----------------------------------------------------------------------------------------------------------------------------------------------------------
package se.binarygames.game.gamestates;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.scenes.scene2d.Stage;
import com.badlogic.gdx.scenes.scene2d.ui.ImageButton;
import com.badlogic.gdx.scenes.scene2d.ui.Label;
import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane;
import com.badlogic.gdx.scenes.scene2d.ui.Table;
import com.badlogic.gdx.scenes.scene2d.ui.TextButton;
import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener;

import java.util.ArrayList;

import se.binarygames.game.Main;
import se.binarygames.game.util.Styles;

public class LevelScreen {

public static Stage levelStage;

public static Table levelTable;
public static ScrollPane levelScrollPane;
public static ArrayList<ImageButton> levelsArrayList;
public static ImageButton imageButton;

public static void render(SpriteBatch batch) {
levelStage.draw();
}

public static void create() {
levelStage = new Stage();
Gdx.input.setInputProcessor(levelStage);

levelsArrayList = new ArrayList<ImageButton>();

FileHandle dirHandle;
dirHandle = Gdx.files.internal("maps/");
for (FileHandle entry : dirHandle.list()) {
imageButton = new ImageButton(imageButton.getStyle());
imageButton.setBounds(100, 100, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
levelsArrayList.add(imageButton);
}

levelTable = new Table();
for (ImageButton imageButton : levelsArrayList) {
levelTable.setWidth(300);
levelTable.row();
levelTable.addActor(imageButton);

}

levelScrollPane = new ScrollPane(levelTable);
levelScrollPane.setBounds(300, 100, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
levelStage.addActor(levelScrollPane);

// Temp
Label gameStateLabel = new Label(Main.getGameState().name(), Styles.bodyLabelStyle);
gameStateLabel.setX(10);
gameStateLabel.setY(Gdx.graphics.getHeight() - 50);
levelStage.addActor(gameStateLabel);

// Skip button
TextButton skipButton = new TextButton("", Styles.bodyButtonStyle);
skipButton.setBounds(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
skipButton.addListener(new ChangeListener() {
@Override
public void changed(ChangeEvent event, Actor actor) {
Main.setGameState(Main.GameState.LOADING_SCREEN);
LoadingScreen.create();
}
});
levelStage.addActor(skipButton);
}
}

-----------------------------------------------------------------------------------------------------------------------------------------------------------

Permalänk

Allt ska också vara dynamiskt! Man behöver bara lägga till en bild i assets foldern "map/" så kommer den sen automatiskt som en ny bildknapp