因为有要实现以下TextButton的这个需求。然后就去看了一下Libgdx中文档。游戏中的按钮,很多人都比较习惯使用换图片的方式来实现。很少有人会直接使用libgdx中的TextButton,如果实在不行也是自己去写一个TextButton的类。
抱着“它真的有那么渣的态度吗”,我去看了一下libgdx自带的TextButton。以下是我的思考的轨迹。整理如下:
在现在,libgdx的资料那么少,有的那些资料也是比较基础的。抱着“看别人的,还不如自己去官方文档。”的态度,自己就开始了以下的历程。。。
1、首先是看了他官方提供的Gdx-test的例子中有以下的这个用法:
new TextButton("Flick Scroll", skin.get("toggle", TextButtonStyle.class));
以下是自己对Skin类学习以后的一些思考与笔记:
http://blog.csdn.net/hjd_love_zzt/article/details/37566435
3、 对TextButton的学习与分析。
对一个类的学习还是按照以下思路:“如果有官方demo,就先去看官方的demo。掌握基本使用以后,然后去看那个类的源码”。。
1)以下是自己整理出来的基本使用:
//使用Skin来存储组件的style TextButtonStyle textButtonStyle = new TextButtonStyle(); textButtonStyle.fontColor = Color.RED;//不起作用 textButtonStyle.font = new BitmapFont(Gdx.files.internal("hjd.fnt"), Gdx.files.internal("hjd.png"),false); // textButtonStyle.font.setColor(Color.RED);//不起作用 // textButtonStyle.downFontColor = Color.BLUE; skin.add("style", textButtonStyle); textButton = new TextButton("hello textButton", skin, "style"); // textButton.getLabel().getStyle().fontColor = Color.YELLOW;//没起作用 // textButton.getLabel().setColor(Color.RED);//没起作用 textButton.setPosition(50, 50); // textButton.setColor(Color.RED);//不起作用 stage.addActor(image); stage.addActor(textButton);
2)源码分析
先贴出TextButton的源码相关源码:
这里只看3个函数:。调用TextButton(String,Skin,String)后,它内部会调TextButton(String,TextButtonStyle)这个构造函数。而这个构造函数中掉了Label的构造函数,所以Style.font、fontColor对象一定要初始化,否则会报相应的异常。。。
public TextButton (String text, Skin skin, String styleName) { this(text, skin.get(styleName, TextButtonStyle.class)); setSkin(skin); } public TextButton (String text, TextButtonStyle style) { super(style); this.style = style; label = new Label(text, new LabelStyle(style.font, style.fontColor)); label.setAlignment(Align.center); add(label).expand().fill(); setWidth(getPrefWidth()); setHeight(getPrefHeight()); }
public void draw (SpriteBatch batch, float parentAlpha) { Color fontColor; if (isDisabled && style.disabledFontColor != null) fontColor = style.disabledFontColor; else if (isPressed() && style.downFontColor != null) fontColor = style.downFontColor; else if (isChecked && style.checkedFontColor != null) fontColor = (isOver() && style.checkedOverFontColor != null) ? style.checkedOverFontColor : style.checkedFontColor; else if (isOver() && style.overFontColor != null) fontColor = style.overFontColor; else fontColor = style.fontColor; if (fontColor != null) label.getStyle().fontColor = fontColor; super.draw(batch, parentAlpha); }