Я просто не могу этого понять и сейчас вырываю волосы !!
У меня есть Stage
с добавленным Label
, я все настроил, и при первом вызове Stage.draw()
все работает нормально. Однако, как только я устанавливаю текст Label
, ничего не прорисовывается. Забавно то, что когда я не меняю текст, он отрисовывается идеально, как ожидалось, но когда я вызываю label.setText("THE TEXT")
, он просто не отрисовывается.
Я прошел через свой код и записал значения height
, width
, x
и y
до и после установки текста Label
, и они все одинаковые (до и после).
Кроме того, когда я рисую Stage
, он рисуется над Sprite
, а расположение Sprite
основывается на положении Label
. Sprite
отлично отрисовывается до того, как я установил текст на Label
и после.
PS: Я также убедился, что Sprite
не нарисован "поверх" Label
.
Это моя установка:
У меня есть класс MainGame
, который отображает класс Player
, когда когда-либо нажимается кнопка back
, рисуется Sprite
с Stage
или должен быть нарисован.
spriteBatch.begin();
player.update(spriteBatch, delta);
spriteBatch.end();
// the pause menu is drawn with a separate sprite batch as it needs to be in middle relative to the screen and above everything else
if (player.isPaused()){
messageSpriteBatch.begin();
messageSprite.draw(messageSpriteBatch);
messageSpriteBatch.end();
messageStage.draw(); // the stage doesn't seem to be getting drawn
}
Класс игрока - метод обновления
if (!paused){
// removed for clarity
}else{
// on MainGame class we render a small box with one of the following messages
// READY
// PAUSE
// QUIT?
// GAME OVER
if (Gdx.input.justTouched()){
paused = false;
}
spriteBatch.setProjectionMatrix(camera.combined);
camera.update();
}
messageSpriteBatch = new SpriteBatch();
messageStage = new Stage(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
messageFont = new BitmapFont(Gdx.files.internal("fonts/fontfile.fnt"));
messageStyle = new LabelStyle();
messageStyle.font = messageFont;
messageLabel = new Label("READY", messageStyle);
Вот как я инициализирую свои Label
, Sprite
и Stage
:
float fontScaleX = Gdx.graphics.getWidth()/SCALE_X_DIVIDER;
float fontScaleY = Gdx.graphics.getHeight()/SCALE_Y_DIVIDER;
messageLabel.setFontScale(fontScaleX*1.4f, fontScaleY*4.2f);
messageLabel.setPosition((messageStage.getWidth()/2)-((messageLabel.getWidth()/2)*messageLabel.getFontScaleX()), (messageStage.getHeight()/2)-((messageLabel.getHeight()/2)*messageLabel.getFontScaleY())+(player.getScoreboard().getSize().y/2));
messageStage.addActor(messageLabel);
messageStage.act();
messageTexture = new Texture(Gdx.files.internal("images/message_background.png"));
messageSprite = new Sprite(messageTexture);
messageSprite.setSize((messageLabel.getWidth()*messageLabel.getFontScaleX())*1.5f, (messageLabel.getHeight()*messageLabel.getFontScaleY())*3);
messageSprite.setPosition(messageLabel.getX()-(messageSprite.getWidth()/6), messageLabel.getY()-messageSprite.getHeight()/2);
Пожалуйста, помогите мне, пока я не стал лысым xD
2 ответа
Ха-ха, я узнал, что случилось, это был мой файл шрифта, вы видите, когда я его редактировал, я использовал текст ГОТОВ , поэтому, когда я его сохранил, я не знал, что записанный текст - это то, что сохраняется, поэтому, когда я просмотрел файл font.png, я обнаружил, что он содержит только буквы ADERY .
В любом случае спасибо за помощь =]
Ширина и высота метки обычно устанавливаются один раз при создании метки, совпадая с шириной и высотой исходного текста, переданного в конструктор. Вы, конечно, можете увеличить его, установив ширину и высоту позже. Тогда вы также можете использовать выравнивание, кстати ...
Используете ли вы какие-либо специальные символы при изменении текста, поэтому у шрифта есть проблемы с этим?
Возможно, публикация кода может дать больше информации ...
Похожие вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.