17.常用UI界面(二)


标签:
android开发 |
分类: libGDX开发教程 |
本文使用的libgdx是0.98版本,可能和最新版有一些不同地方。全文内容仅供参考。
(2)新建一个项目,命名为UItest,将我们只做好的“uiskin.json”、"uiskin.atlas"、“uiskin.png”都放入data文件夹中,同时将使用的素材也放入其中。
上一次我们学习了libgdx中UI界面的使用,其中给我们主要学习了SKIN类的一些基本概念,也初步的了解了SKIN的用法和原理,但是这些并不是SKIN类的全部,libgdx给我们封装的东西,远远不止这些,在上一次我也介绍了关于SKIN是可以和JSON一起使用的,那么今天我们就来学习下SKIN类的这个用法。
Libgdx游戏引擎(1群):187378034
Libgdx游戏引擎(2群):148848483
Libgdx游戏引擎(3群): 79168470
1.JSON文件
JSON定义:JSON(JavaScript
Object Notation) 是一种轻量级的数据交换格式,类似于XML。
JSON详细介绍:关于JSON,这里土豆引用Mars老师的视频教程,希望可以帮助大家可以理解。(PS:土豆也是Mars老师的忠实粉丝)
视频教程:
2.libgdx中的JSON封装
关于封装JSON,libgdx做了详细的封装,由于今天我们介绍的是UI方面,而且也是介绍SKIN类,那么我们就单独介绍关于Skin方面的JSON封装。
API介绍:由于JSON文件,是以键值对的方式保存数据的,这样,JSON文件在libgdx中也是一样,它的书写基本格式,在API中也是给我们写好了,我们只要按照他给的固定格式就可以制作JSON文件。
JSON文件详解:
(1)JSON文件可以根据类名来描述不同的文件,类名是Java类的完全限定名称的对象,其中名字是每个资源的名称。资源是JSON对象的实际资源,JSON实际上通过名字,拿到对应着的字段名称的资源的类。
如图:
(2)JSON文件设置,首先,定义一些颜色和字体。其次,定义一些文本按钮样式。字段的下、上、和检查类型的绘图。
如图:
(3)关于颜色,如果设置了颜色的RGB值,那么该处的值为1,如果没有设置默认设置为0.如上图
(4)Bitmapfont相关。首先,libgdx中默认宣召JSON文件设定的Bitmaofont文件是在JSON文件通目录一下寻找的,如果没有找到才在内部路径中寻找,一般是将fnt文件和JSON文件放置在一起,这样方便使用。当然了,默认获得fnt文件队友的png图片也是同理的,如果没有在JSON文件目录下找到的话,那么会在内部路径内寻找同名字的png。
如图:
(5)TintedDrawable
常用来控制按钮的抬起和按下。原理同上。
如图:
3.实例演示
(1)首先用Herio建立一个fnt文件,支持文字输入。具体实现,可以参照土豆的博文《中文显示与汉字绘制》。
如图:
(2) 新建一个JSON文件。
1.首先,建立一个txt文件命名为“default.txt”.
如图:
2.将扩展名改为“.json”同时用记事本打开,在起内部书写我们需要使用的资源和键值对。
如图:
3.选取一张UI方面的图片(图片可以自己PS做),同时配置Atlas,也是新建文本文件然后输入配置信息,但是要将“.png”图片在配置中传入。
如图:(左:Atlas、右:控件图)
(2)新建一个项目,命名为UItest,将我们只做好的“uiskin.json”、"uiskin.atlas"、“uiskin.png”都放入data文件夹中,同时将使用的素材也放入其中。
PS:由于skin默认是读取相同名字的altas和png图片,所以不仅要将他们放置在同一个文件夹下,同时名字也必须一样否则会报错。
如图:(使用素材:一只猫、一张图片)
(猫)
(土豆)
(3)新建一个String的数组便以后使用,同时初始化需要用到的对象。
如图:
(4)实例化对象,同时将“.JSON”文件传入,实例化舞台、纹理区域等。
如图:
(5)实例化按钮,同时传入ButtonStyle中“toggle”样式。
如图:
(6)创建不同控件,Label、CheckBox、Slider等。
如图:
如图:
(8)创建window控件,将所有的控件全部加入到window中,方便管理,最后加入舞台。
如图:
(9)加入监听,打印出一些东西,方便我们查看控件使用效果。
如图:
(1)MyGdxUI类中的代码。
package com.potato;
importcom.badlogic.gdx.ApplicationListener;
importcom.badlogic.gdx.Gdx;
importcom.badlogic.gdx.Input.Keys;
importcom.badlogic.gdx.graphics.Color;
importcom.badlogic.gdx.graphics.GL10;
importcom.badlogic.gdx.graphics.OrthographicCamera;
importcom.badlogic.gdx.graphics.Pixmap;
importcom.badlogic.gdx.graphics.Texture;
importcom.badlogic.gdx.graphics.Pixmap.Format;
importcom.badlogic.gdx.graphics.Texture.TextureFilter;
importcom.badlogic.gdx.graphics.g2d.BitmapFont;
importcom.badlogic.gdx.graphics.g2d.Sprite;
importcom.badlogic.gdx.graphics.g2d.SpriteBatch;
importcom.badlogic.gdx.graphics.g2d.TextureRegion;
importcom.badlogic.gdx.scenes.scene2d.Actor;
importcom.badlogic.gdx.scenes.scene2d.Stage;
importcom.badlogic.gdx.scenes.scene2d.ui.Button;
importcom.badlogic.gdx.scenes.scene2d.ui.CheckBox;
importcom.badlogic.gdx.scenes.scene2d.ui.Dialog;
importcom.badlogic.gdx.scenes.scene2d.ui.Image;
importcom.badlogic.gdx.scenes.scene2d.ui.ImageButton;
importcom.badlogic.gdx.scenes.scene2d.ui.Label;
importcom.badlogic.gdx.scenes.scene2d.ui.List;
importcom.badlogic.gdx.scenes.scene2d.ui.ScrollPane;
importcom.badlogic.gdx.scenes.scene2d.ui.SelectBox;
importcom.badlogic.gdx.scenes.scene2d.ui.Skin;
importcom.badlogic.gdx.scenes.scene2d.ui.Slider;
importcom.badlogic.gdx.scenes.scene2d.ui.SplitPane;
importcom.badlogic.gdx.scenes.scene2d.ui.Table;
importcom.badlogic.gdx.scenes.scene2d.ui.TextButton;
importcom.badlogic.gdx.scenes.scene2d.ui.TextField;
importcom.badlogic.gdx.scenes.scene2d.ui.Window;
importcom.badlogic.gdx.scenes.scene2d.ui.Button.ButtonStyle;
importcom.badlogic.gdx.scenes.scene2d.ui.ImageButton.ImageButtonStyle;
importcom.badlogic.gdx.scenes.scene2d.ui.TextButton.TextButtonStyle;
importcom.badlogic.gdx.scenes.scene2d.ui.TextField.TextFieldListener;
importcom.badlogic.gdx.scenes.scene2d.utils.ChangeListener;
importcom.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable;
importcom.badlogic.gdx.scenes.scene2d.utils.ChangeListener.ChangeEvent;
publicclass MyGdxUI implements ApplicationListener {
String[] listEntries = {"potato1", "potato2", "potato3", "potato4",
"potato5", "potato6", "potato7", "potato8"};
Skin skin;
Stage stage;
SpriteBatch batch;
Texture texture1;
Texture texture2;
Actor root;
Label fpsLabel;
@Override
public void create() {
batch = new SpriteBatch();
skin = new Skin(Gdx.files.internal("data/uiskin.json"));
texture1 = new Texture(Gdx.files.internal("data/cat.jpg"));
texture2 = new Texture(Gdx.files.internal("data/potato.jpg"));
TextureRegion image = new TextureRegion(texture1);
TextureRegion imageFlipped = new TextureRegion(image);
imageFlipped.flip(true, true);
TextureRegion image2 = new TextureRegion(texture2);
stage = new Stage(Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), false);
Gdx.input.setInputProcessor(stage);
//按钮
ImageButtonStyle style = new ImageButtonStyle(skin.get(ButtonStyle.class));
style.imageUp = new TextureRegionDrawable(image);
style.imageDown = new TextureRegionDrawable(imageFlipped);
ImageButton iconButton = new ImageButton(style);
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
public