Ситуация:
Во-первых, я новичок в LibGDX.
Я делаю игру, в которой игроки могут видеть все достижения на экране, поэтому я использую для этого ScrollPane.
Достижения отображаются во всплывающем окне (см. изображение ниже). Список достижений будет внутри этих красных линий.
Снимок экрана:
Проблема.
Проблема в следующем: экран показывает только черный экран, когда я добавляю виджет в панель прокрутки.
Странная вещь:
- когда я перетаскивал панель прокрутки, все отображается правильно.
- Но когда я отпускаю, экран снова чернеет.
Что я сделал:
– я выяснил, что любые актеры (не только таблицы) помещаются в ScrollPane Параметр приведет к черному экрану.
- Если я установлю для него значение null, он работает нормально.
Код:
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();
}
Вопрос.
У кого-нибудь есть идеи о том, что происходит?
И как это исправить?
Заранее спасибо...
============================================== =================================== ОБНОВЛЕНИЕ ================================================== ================================
После нескольких часов экспериментов я создал гораздо более простой проект только экран и актер с нуля:
TestActor.java (это актер)
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 (это экран)
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();
}
Также я выяснил кое-что, что может быть подсказкой во время отладки:
- На первом кадре все отображается правильно.
- Начиная со второго кадра экран становится черным.
Это ошибка?
Или я что-то не так понял?
Мы будем очень признательны за любую помощь...
ScrollPane
иachievementContainer
на сцену? - person Basim Khajwal   schedule 18.12.2014achievementContainer
в качестве виджетаscrollPane
. Затем я добавилscrollPane
кachievementTable
в качестве новой ячейки. Так что да, я уверен. - person Jay Kazama   schedule 18.12.2014