我有一个课程,我加载了所有的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),并且对于不同类中的每个按钮,它看起来像很多代码。有没有解决方案可以更有效地解决这个问题?
答案 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。