user959631
user959631

Reputation: 992

Setting text on Label (Actor) stops drawing

I just can't figure this, and I am pulling my hair out right now!!

I have a Stage with a Label added to it, I set everything up and the first time I call Stage.draw() everything works fine. However, as soon as I set the text of the Label nothing gets drawn. Funny thing is, when I don't change the text it draws perfectly as expected, but when I call label.setText("THE TEXT") it just doesn't draw.

I have stepped through my code and I have noted down the height, width, x and y values before and after setting text of the Label, and they are all the same (before and after).

Also, when I draw the Stage it's drawn above a Sprite, and positioning the Sprite is based on the Label's position. The Sprite draws fine before I set text on the Label and after.

PS: I have also made sure that the Sprite is not drawn "over" the Label.

This is my setup:

I have a MainGame class that renders a Player class, when ever the back button is pressed the Sprite with the Stage gets drawn, or should get drawn.

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
}

Player class - update method

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);

This is how I initialise my Label, Sprite and 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);

Please help me, before I get bald xD

Upvotes: 0

Views: 178

Answers (2)

user959631
user959631

Reputation: 992

Haha, well, I found out what was up, it was my font file, you see when I was editing it, I used the text READY, so when I saved it, I didn't know that the text written is what is saved, so when I looked at the font.png file, I found that it only contained the letters ADERY.

Thanks for the help anyway =]

Upvotes: 0

florianbaethge
florianbaethge

Reputation: 2560

Well the width and height of the label is usually set once when creating the Label, matching the width and height of the initial text passed to the Constructor. You of course can make it bigger by setting the width and height later on. Then you could also use alignments by the way...

Are you using any special characters when changing the text, so the font has a problem with that?

Maybe posting some code could give more insights...

Upvotes: 1

Related Questions