您的位置:首页 > 其它

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

2013-03-12 09:27 169 查看
转自:http://www.apkbus.com/android-60569-1-1.html

讲源代码下载:


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

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

下载积分: 下载豆 -2

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

[align=left]首先我们来看看标签类,Label:[/align]



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

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



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

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



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

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

[align=left]我们返回来继续讲Label的使用方法:[/align]



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

[align=left]我们可以看到,构造函数中的CharSequence其实就是我们要显示的内容,Skin或者Label.LabelStyle则指定Label的样式。这里我们用最简单的第一个构造函数来实现一个Label。[/align]
[align=left]其中用到了Label.LabelStyle类,我们再来看一下。[/align]



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

[align=left]既然知道了怎么构造一个Label,我们就在我们的代码中添加一个Label,看看实际的效果好了。这次我们的代码在十三讲的基础上进行修改。在MyGame.java中添加一个Label实例:[/align]

Label label;

复制代码
[align=left]还是在show()函数中进行初始化:[/align]

label=new Label("Testin",new Label.LabelStyle(bf,new Color(0, 0, 1, 1)));

复制代码
[align=left]我们在原来的程序中添加过一个BitmapFont字体实例bf,这里就直接拿来用了,至于Color类的使用也非常简单,构造函数中的四个参数即为我们熟悉的RGBA,并且值都在0-1之间。[/align]
[align=left]初始化完成后我们加入这个Label,顺便设置了一下label的位置。[/align]

label.x=300;

label.y=300;

复制代码
[align=left]运行一下看看效果:[/align]



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

[align=left]字有点小,我们可以把字体变得大一点:[/align]

//字体放大五倍

bf.setScale(5f);

复制代码

[align=left]重新运行一下,这次足够的大了:[/align]



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

[align=left]除此之外,我们还可以直接将Label加入Button,因为Button也继承自Group,可以作为一个父控件使用,不把label加入stage而是加入Button中,并且将设置label位置的代码删去,并且修改Button的位置,这里注意,对于Actor设置其位置,都是相对父控件而言的。[/align]

//设置Button的位置

button.x=Gdx.graphics.getWidth()/3;

复制代码

button.addActor(label);

复制代码
[align=left]运行看看效果,这里我们修改了字体的大小,为了看起来更合适一些。[/align]



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

[align=left]接下来我们再介绍一个控件CheckBox,看到这个名字大家一定不会陌生,这么类SDK也有,相当于一个选择是或者否的控件,我们还是来看看CheckBox的介绍:[/align]



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

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

[align=left]依然来看看其构造方法:[/align]



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

[align=left]我们发现,和我们刚才介绍的Label的构造方法非常类似,都需要一个某某Style的类来指定这个控件的样式,我们就顺势看看CheckBox.CheckBoxStyle这个样式类:[/align]



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

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

[align=left]那我们就构造一个CheckBox,首先我做了两张图片,分别代表CheckBox勾选和未勾选时的图片:[/align]



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



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

[align=left]我们在MyGame.java中添加一个CheckBox变量:[/align]

CheckBox checkbox;

复制代码
[align=left]在show()中进行初始化:[/align]

TextureRegion checked=new TextureRegion(new Texture(Gdx.files.internal("checked.png")));

TextureRegion unchecked=new TextureRegion(new Texture(Gdx.files.internal("unchecked.png")));

checkbox=new CheckBox("Testin",new CheckBox.CheckBoxStyle(checked,unchecked,bf,new Color(0, 1, 0, 1)));

复制代码
[align=left]加入舞台:[/align]

stage.addActor(checkbox);

复制代码
[align=left]运行一下:[/align]



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



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

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

[align=left]至于按下的回调函数,由于CheckBox继承自Button,因此可以用Button一样的方法设置一个监听器,并从成员isPressed中获取当前状态。[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐