libgdx游戏引擎教程(十四)libgdx中常用的控件(附源码)

转自:http://www.apkbus.com/android-60569-1-1.html

 

讲源代码下载:

edu.nju.wsj.libgdx.rar(3.84 MB, 下载次数: 104)

2012-7-24 20:42 上传
点击文件名下载附件
下载积分: 下载豆 -2



 

这一讲作为外篇四,给大家介绍一些libgdx中常用的控件。事实上,libgdx中的的动作效果和与用户的交互基本依赖于演员类Actorlibgdx中的控件不出意外的都直接或者间接继承自Actor


 

首先我们来看看标签类,Label:


 

1.PNG
2012-7-24 20:44 上传
下载附件(25.47 KB)


 

我们发现Label最终是继承自演员类Actor,其实我们可以发现,libgdx中我们常用的控件都集中在com.badlogic.gdx.scenes,scene2d.ui这个包中。这里说一句题外话。从上面的图中我们可以看到Label实现了一个Layout接口。我们先来看看Layout接口

2.PNG
2012-7-24 20:44 上传
下载附件(27.65 KB)


 

我们可以看到,我们常用的这些UI控件,包括我曾经给大家介绍过的Button,Slider还有Window都实现了这个所谓的Layout接口。这个接口有以下会很多方法,大家不必深究很多方法是在舞台绘制的时候由Actor的父控件自动调用的,大家稍微了解一点就可以了



 

3.PNG
2012-7-24 20:44 上传
下载附件(50.66 KB)


 

简单的说,Layout方法提供了一些让演员Actor在父控件(如Group,Window或者Stage等等)中大小的适应方法,比如取得一些默认的宽度和长度等等,我们不必在此深究,需要用的时候再查查文档即可,深究起来就非常复杂了。



 

我们返回来继续讲Label的使用方法:



 

4.PNG
2012-7-24 20:44 上传
下载附件(39.2 KB)



 

我们可以看到,构造函数中的CharSequence其实就是我们要显示的内容,Skin或者Label.LabelStyle则指定Label的样式。这里我们用最简单的第一个构造函数来实现一个Label
其中用到了Label.LabelStyle类,我们再来看一下。
5.PNG
2012-7-24 20:44 上传
下载附件(25.8 KB)
既然知道了怎么构造一个Label,我们就在我们的代码中添加一个Label,看看实际的效果好了。这次我们的代码在十三讲的基础上进行修改。在MyGame.java中添加一个Label实例:
  1. Label label;
复制代码
还是在show()函数中进行初始化:
  1. label=new Label("Testin",new Label.LabelStyle(bf,new Color(0, 0, 1, 1)));
复制代码
我们在原来的程序中添加过一个BitmapFont字体实例bf,这里就直接拿来用了,至于Color类的使用也非常简单,构造函数中的四个参数即为我们熟悉的RGBA并且值都在0-1之间
初始化完成后我们加入这个Label,顺便设置了一下label的位置。
  1. label.x=300;
  2. label.y=300;
复制代码
运行一下看看效果 :



6.png

2012-7-24 20:44 上传
下载附件(38.53 KB)


字有点小,我们可以把字体变得大一点:


 

  1. //字体放大五倍
  2. bf.setScale(5f);
复制代码
重新运行一下,这次足够的大了:
7.png
2012-7-24 20:44 上传
下载附件(39.2 KB)



 

除此之外,我们还可以直接将Label加入Button,因为Button也继承自Group,可以作为一个父控件使用,不把label加入stage而是加入Button,并且将设置label位置的代码删去,并且修改Button的位置,这里注意,对于Actor设置其位置,都是相对父控件而言的。
  1. //设置Button的位置
  2. button.x=Gdx.graphics.getWidth()/3;
复制代码
  1. button.addActor(label);
复制代码
运行看看效果,这里我们修改了字体的大小,为了看起来更合适一些。



 

8.png
2012-7-24 20:44 上传
下载附件(37.7 KB)




 

接下来我们再介绍一个控件CheckBox,看到这个名字大家一定不会陌生,这么类SDK也有,相当于一个选择是或者否的控件,我们还是来看看CheckBox的介绍:
9.PNG
2012-7-24 20:44 上传
下载附件(31.88 KB)


 

我们可以看到,CheckBox继承自Button,那我们就可以确信,它的很多性质都和Button类似,而Button的使用我们大家一定很了解了。


 

依然来看看其构造方法:
10.PNG
2012-7-24 20:44 上传
下载附件(29.77 KB)
我们发现,和我们刚才介绍的Label的构造方法非常类似,都需要一个某某Style的类来指定这个控件的样式,我们就顺势看看CheckBox.CheckBoxStyle这个样式类:
11.PNG
2012-7-24 20:44 上传
下载附件(27.78 KB)


 

很显然,我们用最后一个构造函数来构造这个CheckBox.CheckBoxStyle,第一个参数是设定了CheckBox没有被勾选时的图片,第二个自然就是被勾选时的图片了,后面两个大家很熟悉,一个是字体BitmapFont实例,后一个是颜色Color.



 

那我们就构造一个CheckBox,首先我做了两张图片,分别代表CheckBox勾选和未勾选时的图片:
checked.png
2012-7-24 20:44 上传
下载附件(7.43 KB)


unchecked.png

2012-7-24 20:44 上传
下载附件(7.08 KB)


我们在MyGame.java中添加一个CheckBox变量:
  1. CheckBox checkbox;
复制代码
show()中进行初始化:
  1. TextureRegion checked=new TextureRegion(new Texture(Gdx.files.internal("checked.png")));
  2. TextureRegion unchecked=new TextureRegion(new Texture(Gdx.files.internal("unchecked.png")));
  3. checkbox=new CheckBox("Testin",new CheckBox.CheckBoxStyle(checked,unchecked,bf,new Color(0, 1, 0, 1)));
复制代码
加入舞台:
  1. stage.addActor(checkbox);
复制代码
运行一下:
12.png
2012-7-24 20:44 上传
下载附件(44.05 KB)



 

13.png
2012-7-24 20:44 上传
下载附件(43.37 KB)


 

上面两张图分别是勾选和未勾选时的样子,右边的绿色的“Testin”字样其实是CheckBox的一部分。


 

至于按下的回调函数,由于CheckBox继承自Button因此可以用Button一样的方法设置一个监听器,并从成员isPressed中获取当前状态

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值