android游戏引擎libgdx使用教程11:如何使用skin和ui配置文件

鸡啄米  •  扫码分享
我是创始人李岩:很抱歉!给自己产品做个广告,点击进来看看。  

& & & &libgdx的ui改进很大,原来各种稀奇古怪的问题都已经解决了,而且ui的类型也基本上完全了。推荐大家下载最近的版本使用。

& & & &ui的使用我觉得唯一复杂的就是各种样式的制定,比如textbutton:

java代码
  1. public&textbuttonstyle&(ninepatch&down,&ninepatch&up,&ninepatch&checked,&float&pressedoffsetx,&float&pressedoffsety,float&unpressedoffsetx,&float&unpressedoffsety,&bitmapfont&font,&color&fontcolor,&color&downfontcolor,color&checkedfontcolor)&&

& & & &再看看list:

& & & &public liststyle (bitmapfont font, color fontcolorselected, color fontcolorunselected, ninepatch selectedpatch)

& & & &每次使用都需要实例化若干个texture,ninepatch什么的还是有点麻烦,还好libgdx给出了一个解决方案:skin。

& & & &skin保存了ui的样式和相关的资源,定义使用的是json或者json-like。api地址:http://libgdx.l33tlabs.org/docs/api/com/badlogic/gdx/scenes/scene2d/ui/skin.html

& & & &先看看基本格式:

java代码
  1. {&&&&
  2. resources:&{&&&&
  3. classname:&{&&&&
  4. name:&value,&&&&
  5. ...&&&&
  6. },&&&&
  7. ...&&&&
  8. },&&&&
  9. styles:&{&&&&
  10. classname:&{&&&&
  11. name:&value,&&&&
  12. ...&&&&
  13. },&&&&
  14. ...&&&&
  15. }&&&&
  16. } & &

& & & &由两个大块定义:资源和样式。先做个fnt文件以便支持中文。

android游戏引擎libgdx使用教程11:如何使用skin和ui配置文件

& & & &保持为chinese.fnt和chinese.png。再做张图:android游戏引擎libgdx使用教程11:如何使用skin和ui配置文件全部拷贝到项目文件中(我是新建了一个ui文件夹)。我们先写个label试试。定义需要的ninepath:

java代码
  1. com.badlogic.gdx.graphics.g2d.ninepatch:&{&&&
  2. default-rect-red:&[&&&
  3. {&width:&2,&height:&1,&x:&1,&y:&43&},&&&
  4. {&width:&1,&height:&1,&x:&2,&y:&43&},&&&
  5. {&width:&2,&height:&1,&x:&3,&y:&43&},&&&
  6. {&width:&2,&height:&1,&x:&1,&y:&45&},&&&
  7. {&width:&1,&height:&1,&x:&2,&y:&45&},&&&
  8. {&width:&2,&height:&1,&x:&3,&y:&45&},&&&
  9. {&width:&2,&height:&1,&x:&1,&y:&43&},&&&
  10. {&width:&1,&height:&1,&x:&2,&y:&43&},&&&
  11. {&width:&2,&height:&1,&x:&3,&y:&43&}&&&
  12. ],&&&
  13. default-rect-yellow:&[&&&
  14. {&width:&2,&height:&1,&x:&1,&y:&54&},&&&
  15. {&width:&1,&height:&1,&x:&2,&y:&54&},&&&
  16. {&width:&2,&height:&1,&x:&3,&y:&54&},&&&
  17. {&width:&2,&height:&1,&x:&1,&y:&55&},&&&
  18. {&width:&1,&height:&1,&x:&2,&y:&55&},&&&
  19. {&width:&2,&height:&1,&x:&3,&y:&55&},&&&
  20. {&width:&2,&height:&1,&x:&1,&y:&54&},&&&
  21. {&width:&1,&height:&1,&x:&2,&y:&54&},&&&
  22. {&width:&2,&height:&1,&x:&3,&y:&54&}&&&
  23. ]&&&
  24. }&&

& & & &再定义一个白色:

java代码
  1. com.badlogic.gdx.graphics.color:&{&&&
  2. white:&{&a:&1,&b:&1,&g:&1,&r:&1&}&&&
  3. }&&

& & & &然后我们的字体:

java代码
  1. com.badlogic.gdx.graphics.g2d.bitmapfont:&{&&&
  2. default-font:&{&file:&chinese.fnt&}&&&
  3. }&&

& & & &然后在样式中声明一个label样式:

java代码
  1. com.badlogic.gdx.scenes.scene2d.ui.label$labelstyle:&{&&&
  2. default:&{&font:&default-font,&fontcolor:&white}&&&
  3. }&&

& & & &使用时:

java代码
  1. skin&skin&=&new&skin(gdx.files.internal("ui/uiskin.json"),&gdx.files.internal("ui/ui.jpg"));&//加载样式&&
  2. &&
  3. final&label&label&=&new&label("fps:",&skin.getstyle("default",labelstyle.class),&"fpslabel");&//获取label样式&&

& & & &效果:

android游戏引擎libgdx使用教程11:如何使用skin和ui配置文件

& & & &然后再来试试textbutton:

java代码
  1. com.badlogic.gdx.scenes.scene2d.ui.textbutton$textbuttonstyle:&{&&&
  2. default:&{&down:&default-rect-red,&up:&default-rect-yellow,fontcolor:&white,&font:&default-font}&&&
  3. }&&

& & & &调用:

java代码
  1. final&textbutton&textbutton&=&new&textbutton("确认",&skin.getstyle("default",&textbuttonstyle.class),&"okbutton");&&

& & & &效果:

android游戏引擎libgdx使用教程11:如何使用skin和ui配置文件

&

& & & &按下去的时候会变黄(没截起图)…

& & & &skin真的用着很方便,特别是你大量使用了libgdx的ui的时候。

& & & &写在最后

& & & &1、skin支不支持xml?

& & & &说实话我也很想知道,因为gdx-tests里面skin 的配置文件有两个,一个是json格式,另外一个是xml格式。但是我试了一下直接加载xml会报错。

& & & &其实我比较推荐用xml格式,因为json格式书写时候容易写错(少个逗号或者括号什么的),而且eclipse的自动缩进没有发挥作用(难道是配置问题?)。

& & & &2、skin支持不一个配置文件多个图片文件,这个情况推荐将图片合并或者干脆用多个skin就行了。

& & & &3、skin的图片定义的原点是左上角。

&

本文发布:android开发网
本文地址:http://www.jizhuomi.com/android/game/419.html
2013-5-10 16:26:39
发布:鸡啄米 分类:android游戏开发 浏览: 评论:1

随意打赏

提交建议
微信扫一扫,分享给好友吧。