我就是想不通,我现在正在拔头发!!
我有一个添加了 Label
的 Stage
,我设置了所有内容,并且第一次调用 Stage.draw()
一切正常。但是,一旦我设置了 Label
的文本,就不会绘制任何内容。有趣的是,当我不更改文本时,它会按照预期完美地绘制,但是当我调用 label.setText("THE TEXT")
时,它只是不绘制。
我已经单步执行了我的代码,并记下了高度
、宽度
、x
和y
设置Label
文本之前和之后的值,并且它们都是相同的(之前和之后)。
此外,当我绘制 Stage
时,它会绘制在 Sprite
上方,并且 Sprite
的定位基于 Label
的位置。
在我在 Label
上设置文本之前及之后,Sprite
绘制得很好。
PS:我还确保 Sprite
没有绘制在 Label
上。
这是我的设置:
我有一个MainGame
类,它渲染一个Player
类,当按下后退
按钮时,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
最佳答案
标签的宽度和高度通常在创建标签时设置一次,与传递给构造函数的初始文本的宽度和高度相匹配。当然,您可以通过稍后设置宽度和高度来使其更大。然后你也可以顺便使用对齐方式...
您在更改文本时是否使用了任何特殊字符,因此字体有问题?
也许发布一些代码可以提供更多见解......
关于java - 在标签(Actor)上设置文本会停止绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22290021/