Situation:
First of all, I am new to LibGDX.
I am making a game in which players can see all the achievements on the screen, so I use ScrollPane for this.
Achievements are displayed as pop-ups (see image below). A list of achievements will be inside these red lines.
Screenshot:
Problem:
The problem is this: only a black screen is displayed on the screen when I added the widget to ScrollPane.
Weird:
- When I dragged ScrollPane, everything is displayed correctly .
βBut when I let go , the screen will turn black again .β
What I've done:
- I realized that any participants (not just the table) that I entered in the ScrollPane parameter will lead to a black screen .
- If I set it to null , it works fine .
Code:
public void show() { stage = new Stage(); roomScreenUI = new RoomScreenUI(); roomScreenUI.setName("RoomScreenUI"); stage.addActor(roomScreenUI); roomScreenButton = new RoomScreenButton[5]; for(int i=0; i<roomScreenButton.length; i++){ roomScreenButton[i] = new RoomScreenButton(i+1, roomScreenUI.getScaleFactor()); roomScreenButton[i].setName("RoomScreenButton"); stage.addActor(roomScreenButton[i]); } roomScreenAchievementUI = new RoomScreenAchievementUI(roomScreenUI.getScaleFactor()); roomScreenAchievementUI.setName("RoomScreenAchievementUI"); stage.addActor(roomScreenAchievementUI); //----------------THE PROBLEM LIES HERE----------------// achievementContainer = new Table(); scrollPane = new ScrollPane(achievementContainer); // scrollPane = new ScrollPane(null); <-- If I replace it with this line, it works fine //----------------THE PROBLEM LIES HERE----------------// achievementTable = new Table(); achievementTable.setSize(roomScreenAchievementUI.getWidth() * 0.9f, roomScreenAchievementUI.getHeight() * 0.8f); achievementTable.setPosition(roomScreenAchievementUI.getX() + roomScreenAchievementUI.getWidth() / 2 - achievementTable.getWidth() / 2, roomScreenAchievementUI.getY() + roomScreenAchievementUI.getHeight() * 0.48f - achievementTable.getHeight() / 2); achievementTable.debug(); achievementTable.add(scrollPane).expand().fill(); achievementTable.setName("AchievementTable"); stage.addActor(achievementTable); Gdx.input.setInputProcessor(stage); } public void render(float delta) { Gdx.gl.glClearColor(0, 0, 0, 1); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); // ... code omitted ... // stage.act(delta); stage.draw(); }
Question:
Anyone have any ideas on what is going on?
And how to fix it?
thanks in advance...
============================================= ====== ================================= UPDATE ================= ==================================================== ================
After several hours of experiment, I created a much simpler project with a screen and an actor from scratch:
TestActor.java (this is an actor)
Texture texture; Sprite sprite; public TestActor(){ // I used the default generated image badlogic.jpg texture = new Texture(Gdx.files.internal("badlogic.jpg")); sprite = new Sprite(texture); } @Override public void draw(Batch batch, float alpha){ batch.draw(sprite, 0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); }
TestClass.java (this is a screen)
Stage stage; ScrollPane scrollPane; Table outerTable, innerTable; TestActor testActor; @Override public void show() { stage = new Stage(); testActor = new TestActor(); stage.addActor(testActor); //---------THE PROBLEM IS STILL HERE---------// innerTable = new Table(); scrollPane = new ScrollPane(innerTable); // change it to null, it works //---------THE PROBLEM IS STILL HERE---------// outerTable = new Table(); outerTable.setPosition(0, 0); outerTable.setSize(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); outerTable.debug(); outerTable.add(scrollPane).fill().expand(); stage.addActor(outerTable); } @Override public void render(float delta) { Gdx.gl.glClearColor(0, 0, 0, 1); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); stage.act(delta); stage.draw(); }
I also figured out what could be the key when I debugged:
- In the first frame, everything is displayed correctly.
- Starting from the second frame , the screen turns black.
This is mistake?
Or is this what I misunderstood? Any help would be greatly appreciated ...