libGDX - 更改屏幕后的黑色按钮和文本

时间:2016-04-08 07:30:55

标签: java libgdx

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

After changing screen

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

这会影响所有其他屏幕中的所有TextBox。我的想法是,我的JSON在某种程度上是错误的。因为当我停止使用我的JSON中的drawable并使用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附带的JSON),我仍然遇到同样的问题。

1 个答案:

答案 0 :(得分:0)

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