java - 在标签(Actor)上设置文本会停止绘制

标签 java android eclipse libgdx

我就是想不通,我现在正在拔头发!!

我有一个添加了 LabelStage,我设置了所有内容,并且第一次调用 Stage.draw()一切正常。但是,一旦我设置了 Label 的文本,就不会绘制任何内容。有趣的是,当我不更改文本时,它会按照预期完美地绘制,但是当我调用 label.setText("THE TEXT") 时,它只是不绘制。

我已经单步执行了我的代码,并记下了高度宽度xy设置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);

这就是我初始化 LabelSpriteStage 的方式:

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/

相关文章:

java正则表达式用空格替换任何单个字符

Java jsoup链接提取(输出错误)

java - Haskell 中的 Android 应用程序

android - 在 Android 的 Canvas 上绘制另一个透明图像后面的/'blending' 图像

eclipse - Coudnot 安装 Gradle 发行版 - eclipse- Liferay

eclipse - 安装m2e 1.0后Maven菜单消失

java - 我如何知道 Java 中的 Fork 和 Join 是否有足够的池大小?

java.lang.IllegalStateException : Could not find method in a parent or ancestor Context 错误

android - 如何在谷歌播放控制台中关闭定时发布?

java - 无法在项目上运行 Gradle 任务