Я просто не могу этого понять и сейчас вырываю волосы !!

У меня есть 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

0
user959631 10 Мар 2014 в 04:12

2 ответа

Лучший ответ

Ха-ха, я узнал, что случилось, это был мой файл шрифта, вы видите, когда я его редактировал, я использовал текст ГОТОВ , поэтому, когда я его сохранил, я не знал, что записанный текст - это то, что сохраняется, поэтому, когда я просмотрел файл font.png, я обнаружил, что он содержит только буквы ADERY .

В любом случае спасибо за помощь =]

0
user959631 10 Мар 2014 в 23:46

Ширина и высота метки обычно устанавливаются один раз при создании метки, совпадая с шириной и высотой исходного текста, переданного в конструктор. Вы, конечно, можете увеличить его, установив ширину и высоту позже. Тогда вы также можете использовать выравнивание, кстати ...

Используете ли вы какие-либо специальные символы при изменении текста, поэтому у шрифта есть проблемы с этим?

Возможно, публикация кода может дать больше информации ...

1
florianbaethge 10 Мар 2014 в 11:34
Единственный «специальный» символ, который я использую, - это вопросительный знак (?), но я безуспешно пытался установить другой текст. Кроме того, пожалуйста, смотрите мое редактирование.
 – 
user959631
10 Мар 2014 в 21:38