【问题标题】:libGDX - Black buttons and text after changing screenlibGDX - 更改屏幕后的黑色按钮和文本
【发布时间】:2016-04-08 07:30:54
【问题描述】:

我最近在我的 libGDX 程序中发现了一个奇怪的问题。当我启动我的程序时,我首先显示SplashScreen,然后是MainMenu 屏幕,然后您就可以进入程序了。问题是,如果我在主菜单上更改screen,我的所有TextButtons 都会变成黑色,并且它们的文本字符会变成黑框。

(我使用启动按钮重新加载了 MainMenu)

这会影响所有其他屏幕中的所有文本框。我的想法是我的 JSON 在某种程度上有问题。因为当我停止使用我的 JSON 中的可绘制对象并使用FreeTypeFont 而不是我的BitmapFont 时,至少字体不再变黑。我使用了验证器,他们说我的 JSON 没有问题,但无论如何都是这样(TextButtonStyle 在底部):

{
"com.badlogic.gdx.graphics.Color": {
    "white": {
        "r": 1,
        "g": 1,
        "b": 1,
        "a": 1
    },

    "black": {
        "r": 0,
        "g": 0,
        "b": 0,
        "a": 1
    },

    "red": {
        "r": 1,
        "g": 0,
        "b": 0,
        "a": 1
    },

    "green": {
        "r": 0,
        "g": 1,
        "b": 0,
        "a": 1
    },

    "blue": {
        "r": 0,
        "g": 0,
        "b": 1,
        "a": 1
    },

    "dark_grey": {
        "r": 0.8,
        "g": 0.8,
        "b": 0.8,
        "a": 1
    }
},

"com.badlogic.gdx.graphics.g2d.BitmapFont": {
    "white": {
        "file": "data/fonts/white.fnt"
    },

    "black": {
        "file": "data/fonts/black.fnt"
    }
},

"com.badlogic.gdx.scenes.scene2d.ui.Window$WindowStyle": {
    "default": {
        "titleFont": "black",
        "titleFontColor": "dark_grey"
    }
},

"com.badlogic.gdx.scenes.scene2d.ui.Label$LabelStyle": {
    "default": {
        "font": "white", 
        "fontColor": "white"
    }
},

"com.badlogic.gdx.scenes.scene2d.ui.List$ListStyle": {
    "default": {
        "font": "white",
        "fontColorUnselected": "white",
        "fontColorSelected": "black",
        "selection": "default.selection"
    }
},

"com.badlogic.gdx.scenes.scene2d.ui.ScrollPane$ScrollPaneStyle": {
    "default": {
        "hScrollKnob": "button.up",
        "vScrollKnob": "button.up"
    }
},

"com.badlogic.gdx.scenes.scene2d.ui.TextButton$TextButtonStyle": {
    "default": {
        "up": "button.up",
        "down": "button.down",
        "font": "black",
        "pressedOffsetX": 1,
        "pressedOffsetY": -1
    }
}
}

这是我添加和更改按钮样式的代码。

    // Splash Screen button
    buttonSplash = new TextButton("SPLASH SCREEN", skin);
    buttonSplash.addListener(new ClickListener() {
        @Override
        public void clicked(InputEvent event, float x, float y) {
            // When you click the button, create a new screen
            ((Game) Gdx.app.getApplicationListener()).setScreen(new SplashScreen());
        }
    });
    buttonSplash.pad(20);
    //Rest of the buttons....

如果你觉得你需要整个代码,我也可以发布,但它相当长,所以我没有发布它。

即时编辑:尝试了全新的 JSON(libGDX 附带的那个),但我仍然遇到同样的问题。

【问题讨论】:

  • 你使用的是静态AssetManager吗?

标签: java libgdx


【解决方案1】:

问题似乎来自处理skin。我在外部类中使用static Skin 对象作为我的皮肤,所有需要该皮肤的类都使用它。我的问题是我将皮肤放置在其中一个屏幕中,该屏幕也放置了所有其他类正在使用的皮肤。我通过在包含我所有皮肤的类中简单地创建一个dispose(); 方法来解决这个问题,并在我退出游戏时处理它们。

【讨论】:

  • 你要么在错误的时间处理,要么你应该重新加载并重新初始化皮肤
  • 当您没有完全解决问题时,您不应该回答自己的问题。更改您的初始问题以包含您的更新或添加评论(我认为您可以从 10 名声望中发表评论)。
  • 我实际上在大约一个小时后完全解决了它,但忘记编辑我的答案,但感谢您的洞察力。
猜你喜欢
  • 2016-02-03
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-14
  • 2022-11-19
  • 1970-01-01
相关资源
最近更新 更多