Libgdx之Skin 皮肤类

Posted zqiang_55

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Libgdx之Skin 皮肤类相关的知识,希望对你有一定的参考价值。

上一节介绍了List,应该接着继续介绍其余的Widget,但是每次都要定义Style,还要定义各种属性,感觉特别麻烦。下面介绍另外一种方法,通过定义Skin来省去定义各种Style。
Skin储存Widget的各种样式(Style)来使用(如 纹理,字体,颜色,NinePatches)。当然也可以使用Libgdx系统提供的Skin,要是想这样使用的话必须添加下面资源:

可以点击这里进行下载 这时官方示例中的。

  • uiskin.json 这个文件定义了默认字体, 颜色, 各种Style的属性:
  • uiskin.png skin中用的各种图片的集合
  • uiskin.atlas skin中用到图片的各种属性,和上面文件相当于用TexturePacker打包的集合
  • default.png default.fnt 这2个文件是默认字体文件

下面重新写List的测试代码:

    Stage stage;
    List<String> list;
    String[] listName = "Libgdx", "CSDN", "daXiao","Leitu","Renhua";
    StretchViewport viewport;

    Skin skin;
    @Override
    public void create() 
        viewport = new StretchViewport(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
        viewport.getCamera().translate(Gdx.graphics.getWidth() / 2, Gdx.graphics.getHeight() /2, 0);
        viewport.getCamera().update();
        // 将ListStyle换成skin
        skin = new Skin(Gdx.files.internal("uiskin.json"));

        list = new List<String>(skin);
        list.setItems(listName);
        // 如果不设大小,那么selection就不会显示,也不会响应click事件
        list.setSize(list.getPrefWidth(), list.getPrefHeight());
        list.setPosition(200, 200);
        list.addListener(new ClickListener() 

            @Override
            public void clicked(InputEvent event, float x, float y) 
                System.out.println("selected index=" + list.getSelectedIndex());
                System.out.println("setected=" + list.getSelected());
                super.clicked(event, x, y);
            

        );
        Gdx.app.log("List", "width="+list.getWidth() + "prefer width="+list.getPrefWidth());

        stage = new Stage(viewport);
        Gdx.input.setInputProcessor(stage);

        stage.addActor(list);
    

    @Override
    public void render() 
        Gdx.gl.glClearColor(0.39f, 0.58f, 0.92f, 1.0f);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

        stage.act();
        stage.draw();
    

    @Override
    public void resize(int width, int height) 
        viewport.update(width, height);
    

    @Override
    public void dispose() 
        stage.dispose();
        //  不用的Skin要注销掉
        skin.dispose();
    

下面是效果图,可以看出选中的时的背景图发生了变化:

以上是关于Libgdx之Skin 皮肤类的主要内容,如果未能解决你的问题,请参考以下文章

默认皮肤 LibGDX?

开源java游戏框架libgdx专题-14-系统控件-Skin类

Libgdx专题系列: UI篇 TWL&Skin&TableLayout

LibGDX 默认皮肤未加载

krpano之缩略图文本添加

Swift 换皮肤工具类