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

55
回复
504591
查看
  [复制链接]

30

主题

350

帖子

1089

安币

Android大神

Rank: 6Rank: 6

QQ达人

发表于 2012-7-24 20:42:20 | 显示全部楼层 |阅读模式
本帖最后由 耒佲請ぁ留埗 于 2012-8-3 11:44 编辑


以下系列教程按讲课顺序排列,也是推荐阅读的顺序

第一讲:libgdx游戏引擎教程(一)性能优良的游戏引擎—libgdx http://www.apkbus.com/android-57355-1-1.html

第二讲: libgdx游戏引擎教程(二) ApplicationListener,着手第一个程序http://www.apkbus.com/android-57372-1-1.html

第三讲:libgdx游戏引擎教程()libgdx粒子系统的使用 http://www.apkbus.com/android-57456-1-1.html

外篇一:libgdx游戏引擎教程外篇(一)优美的自定义进度条(附源码) http://www.apkbus.com/android-57523-1-1.html

第四讲:libgdx游戏引擎教程(四) 游戏正式开始,资源异步加载(附源码)http://www.apkbus.com/android-57716-1-1.html

第五讲 libgdx游戏引擎教程(五)多游戏界面的实现(一)附源码 http://www.apkbus.com/android-57936-1-1.html

第六讲 libgdx游戏引擎教程(六)多游戏界面的实现(二)附源码 http://www.apkbus.com/android-57991-1-1.html  

第七讲 libgdx游戏引擎教程(七) 在libgdx中拦截Android按键事件 http://www.apkbus.com/android-58030-1-1.html  

外篇二: libgdx游戏引擎教程外篇(二)libgdx移植俄罗斯方块(附源码) http://www.apkbus.com/android-58102-1-1.html   

实战一:libgdx游戏引擎教程实战篇(一)移植俄罗斯方块(附源码) http://www.apkbus.com/android-58404-1-1.html  

实战二:libgdx游戏引擎教程实战篇(二)移植俄罗斯方块(附源码) http://www.apkbus.com/android-58408-1-1.html  

实战三:libgdx游戏引擎教程实战篇(三)移植俄罗斯方块(附源码) http://www.apkbus.com/android-58414-1-1.html  

实战四:libgdx游戏引擎教程实战篇(四)移植俄罗斯方块(附源码) http://www.apkbus.com/android-58418-1-1.html  

实战五:libgdx游戏引擎教程实战篇(五)移植俄罗斯方块(附源码) http://www.apkbus.com/android-58419-1-1.html

实战六:libgdx游戏引擎教程实战篇(六)移植俄罗斯方块(附源码) http://www.apkbus.com/android-58760-1-1.html

第八讲 libgdx游戏引擎教程(八) libgdx中的用户手势识别(一)附源码 http://www.apkbus.com/android-58933-1-1.html

第九讲 libgdx游戏引擎教程(九) libgdx中的用户手势识别(二)附源码 http://www.apkbus.com/android-59152-1-1.html

外篇三: libgdx游戏引擎教程外篇(三) 优美的自定义对话框(附源码) http://www.apkbus.com/android-59654-1-1.html  

第十讲:  libgdx游戏引擎教程(十)演员类的复杂动画(一)(附源码) http://www.apkbus.com/android-59998-1-2.html

第十一讲:libgdx游戏引擎教程(十一)演员类的复杂动画(二)(附源码) http://www.apkbus.com/android-60053-1-1.html

第十二讲:libgdx游戏引擎教程(十二)演员类的复杂动画(三)(附源码) http://www.apkbus.com/android-60194-1-1.html   

第十三讲: libgdx游戏引擎教程(十三)演员类的用户交互功能详解(附源码)  http://www.apkbus.com/android-60457-1-1.html

第十四讲:libgdx游戏引擎教程(十四)libgdx中常用的控件(附源码) http://www.apkbus.com/android-60569-1-1.html

最新更新 第十五讲 :libgdx游戏引擎教程(十五)在Libgdx中仿微信帮助滑动效果(附源码) http://www.apkbus.com/android-60822-1-1.html



本讲源代码下载:



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

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


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


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



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


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




我们可以看到,构造函数中的CharSequence其实就是我们要显示的内容,Skin或者Label.LabelStyle则指定Label的样式。这里我们用最简单的第一个构造函数来实现一个Label
其中用到了Label.LabelStyle类,我们再来看一下。
既然知道了怎么构造一个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;
复制代码
运行一下看看效果:



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

  1. //字体放大五倍
  2. bf.setScale(5f);
复制代码
重新运行一下,这次足够的大了:


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





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

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

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

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


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


我们在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);
复制代码
运行一下:



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

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


Testin ID:ilovemkey@gmail.com 总的而言这个平台真的非常好用!我正是用这个平台发现了现在写的这个应用的一些内存管理方面的问题。另外建议能够在测试报告中看到某一台机型在整个执行过程中的cpu和内存占用的变化情况,这样可以更快地锁定问题。感谢Itestin让测试变得轻松了太多太多!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
君见一叶舟,出没风波里

0

主题

26

帖子

47

安币

程序猿

Rank: 2

发表于 2012-7-24 22:15:34 | 显示全部楼层
Color类的使用也非常简单,构造函数中的四个参数即为我们熟悉的RGBA,并且值都在0-1之间.
请问楼主,这个RGBA有没有对应的颜色表方便设置颜色时对照

30

主题

350

帖子

1089

安币

Android大神

Rank: 6Rank: 6

QQ达人

 楼主| 发表于 2012-7-24 22:21:25 | 显示全部楼层
hjf7788521 发表于 2012-7-24 22:15
Color类的使用也非常简单,构造函数中的四个参数即为我们熟悉的RGBA,并且值都在0-1之间.
请问楼主,这个RG ...

我们一般的RGB值是255为纯色,这里就是1,然后原来的每一个单位就是1/255,alpha 0.5就是透明度为50%.有什么问题吗?
君见一叶舟,出没风波里

0

主题

46

帖子

171

安币

程序猿

Rank: 2

发表于 2012-7-25 13:41:06 | 显示全部楼层
RGB转换一下即可,Alpha可以参照PS里面的不透明度设置,100%就是完全不透明,0%就是完全透明,应该是这么回事

30

主题

350

帖子

1089

安币

Android大神

Rank: 6Rank: 6

QQ达人

 楼主| 发表于 2012-7-25 13:46:50 | 显示全部楼层
大窝瓜 发表于 2012-7-25 13:41
RGB转换一下即可,Alpha可以参照PS里面的不透明度设置,100%就是完全不透明,0%就是完全透明,应该是这么回 ...

你说的很对
君见一叶舟,出没风波里

0

主题

20

帖子

25

安币

初级码农

Rank: 1

发表于 2012-7-25 17:38:04 | 显示全部楼层
谢谢 分享

0

主题

21

帖子

47

安币

初级码农

Rank: 1

发表于 2012-7-25 20:21:34 | 显示全部楼层
看看了吧

0

主题

270

帖子

4431

安币

码皇(巴士元老)

Rank: 8Rank: 8

发表于 2012-7-26 21:40:34 | 显示全部楼层
{:Skateboard:}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

领先的中文移动开发者社区
18620764416
7*24全天服务
意见反馈:1294855032@qq.com

扫一扫关注我们

Powered by Discuz! X3.2© 2001-2019 Comsenz Inc.( 粤ICP备15117877号 )