libGDX:使用TextureRegion创建TextButton

时间:2017-06-10 18:18:05

标签: android libgdx textures

我有一个课程,我加载了所有的TextureRegions。

public class AssetLoader{

    public static TextureAtlas atlas;
    public static TextureRegion startButtonUp;
    public static TextureRegion startButtonDown;
    ...


    public static void loadAssets(){
        atlas = new TextureAtlas("images.atlas");   
        startButtonUp = atlas.findRegion("start_button_up");
        startButtonDown = atlas.findRegion("start_button_down");
    }
}

现在我想在不同的类中创建一个TextButton,它使用我的AssetLoader中的TextureRegion。我的实际工作流程是:

    buttonsAtlas = new TextureAtlas("images.atlas");
    buttonSkin = new Skin();
    buttonSkin.addRegions(buttonsAtlas);

    font = new BitmapFont();

    stage = new Stage(new FitViewport(800, 400, camera), game.batch);

    Gdx.input.setInputProcessor(stage);

    textButtonStyle = new TextButton.TextButtonStyle();

    textButtonStyle.up = buttonSkin.getDrawable("start_button_up");
    textButtonStyle.down = buttonSkin.getDrawable("start_button_down");

    textButtonStyle.font = font;

    button = new TextButton("Start", textButtonStyle);
    button.setHeight(AssetLoader.startButtonDown.getRegionHeight());
    button.setWidth(AssetLoader.startButtonDown.getRegionWidth());

    button.setPosition(0,100);

    stage.addActor(button);
    button.addListener(new ClickListener() {
        public void touchUp (InputEvent event, float x, float y, int pointer, int button) {
            /// start game
            game.setScreen(new PlayScreen(game));
            dispose();
        }
    });

但在这种情况下,我并不需要我的AssetsLoader(期望RegionWidth和RegionHeight),并且对于不同类中的每个按钮,它看起来像很多代码。有没有解决方案可以更有效地解决这个问题?

1 个答案:

答案 0 :(得分:0)

AssetLoader类,其中textureAtlas和两个TextureRegion的引用位于该纹理范围内。

如果您想依赖AssetLoader,请创建AssetLoader的对象并使用atlas AssetLoader代替buttonsAtlas(textureAtlas的新实例)

或忘记AssetLoader

button = new TextButton("Start", textButtonStyle);
button.setHeight(buttonsAtlas.findRegion("start_button_up").getRegionHeight());
button.setWidth(buttonsAtlas.findRegion("start_button_up").getRegionWidth());

这是在一个课程中创​​建所有资源并在游戏中使用的好方法,如果可能,您应该在游戏中使用AssetManager