版权声明:本文为博主原创文章,未经博主同意不得转载。 https://blog.csdn.net/caihongshijie6/article/details/37566183

        由于有要实现下面TextButton的这个需求。然后就去看了一下Libgdx中文档。

游戏中的button,非常多人都比較习惯使用换图片的方式来实现。

非常少有人会直接使用libgdx中的TextButton。假设实在不行也是自己去写一个TextButton的类。

抱着“它真的有那么渣的态度吗”,我去看了一下libgdx自带的TextButton。下面是我的思考的轨迹。整理例如以下:

        在如今,libgdx的资料那么少,有的那些资料也是比較基础的。抱着“看别人的,还不如自己去官方文档。”的态度,自己就開始了下面的历程。。。

        1、首先是看了他官方提供的Gdx-test的样例中有下面的这个使用方法:

new TextButton("Flick Scroll", skin.get("toggle", TextButtonStyle.class));

2、这里面用到了Skin这个类,Skin这个类一直被同事诟病。可是我还是抱着学习的态度去看了一下Skin这个类的官方文档。

下面是自己对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());
}

至于draw()函数,我想这就是为什么这个TextButton为什么写的失败的原因了吧。。。。实在是太渣了。。

。。。恩恩。是的。

事实证明官方的TextButton确实是太渣了。

。想要设置个字体的颜色都做不到。。

。使用提供的API没有效果。点进去看,有的函数竟然还没有实现。

。。

草。。

。。

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);
}

 

     

     

Libgdx中TextButton的一些思考的更多相关文章

  1. Libgdx New 3D API 教程之 -- Libgdx中使用Materials

    This blog is a chinese version of xoppa's Libgdx new 3D api tutorial. For English version, please re ...

  2. 关于《Head First Python》一书中print_lol()函数的思考

    关于<Head First Python>一书中print_lol()函数的思考 在<Head First Python>第一章中,讲述到Python处理复杂数据(以电影数据列 ...

  3. 简述C#中IO的应用 RabbitMQ安装笔记 一次线上问题引发的对于C#中相等判断的思考 ef和mysql使用(一) ASP.NET/MVC/Core的HTTP请求流程

    简述C#中IO的应用   在.NET Framework 中. System.IO 命名空间主要包含基于文件(和基于内存)的输入输出(I/O)服务的相关基础类库.和其他命名空间一样. System.I ...

  4. c中#与##的应用思考

    c中#与##的应用思考 原创 2014年02月25日 22:01:35 927 一. 思考出处 在读<<linux 0.12完全剖析>>初始化部分, init进程是通过fork ...

  5. 关于HashMap中hash()函数的思考

    关于HashMap中hash()函数的思考 JDK7中hash函数的实现   static int hash(int h) { h ^= (h >>> 20) ^ (h >&g ...

  6. 关于libgdx中UI控件的旋转和缩放的备忘

    最近遇到这样一个问题,定义了一个ImageButton后,想对按钮进行下旋转,结果setRotation(-90f),不起作用.后来在官网上找到了原因 关于UI控件的旋转 缩放官网上有这样一段话(链接 ...

  7. 关于在框架中使用curl的思考,以及,curl其实很好用

    初步猜想: 在接触到框架文档的第一阶段时,会觉得控制器调用模型就是一件很简单的事,tp中用D方法或者M方法来实例化模型,laravel中用命名空间来加载模型,CI中用$this->load-&g ...

  8. Android研发中对String的思考(源代码分析)

    1.经常使用创建方式思考: String text = "this is a test text "; 上面这一句话实际上是运行了三件事  1.声明变量 String text; ...

  9. php中的session过期思考一二

    看了php开发组成员鸟哥的一篇关于php设置session过期(http://www.laruence.com/2012/01/10/2469.html)的文章 他也说了一般人的回答的几个答案, 回答 ...

随机推荐

  1. JavaScript面向对象编程(2)-- 类的定义

    最近这一段时间事情太多了,没有时间再继续写,幸好这两天有点小闲,先小写一下JavaScript中面向对象一中推荐的方法.本文承接上一篇JavaScript面向对象编程(1) -- 基础. 上篇说过,J ...

  2. linux性能分析工具Memory

  3. Linux知识-不断更新2

    为了自己看的更清楚,也为了不断的总结,每次更新后都会另发一篇. 工作中遇到某一文件夹磁盘空间不够,当然每次都是清理日志,最后发现还是不太行,还不能扩容,只能先想办法迁移目录,避免此问题发生,但在这之前 ...

  4. python常用函数 O

    OrderedDict() 保持dict元素插入顺序. 例子: open(path) 可以对文件进行操作,有'r'读模式.'w'写模式.'a'追加模式.'b'二进制模式.'+'读/写模式等,操作完需要 ...

  5. 无法用另一台电脑上的navicat链接主机数据库lost connection toMYSQl server at "handshake":reading inital communication packet,system error:34

    同事要用navicat登陆我的数据库,主机地址和密码都没错,但是报错,lost connection toMYSQl server at "handshake":reading i ...

  6. MySQL MHA+Keepalived

    一.MHA的简单介绍MHA是由perl语言编写的,用外挂脚本的方式实现mysql主从复制的高可用性.MHA可以自动检测mysql是否宕机,如果宕机,在10-30s内完成new master的选举,应用 ...

  7. 利用 Redis 锁解决高并发问题

    这里我们主要利用 Redis 的 setnx 的命令来处理高并发. setnx 有两个参数.第一个参数表示键.第二个参数表示值.如果当前键不存在,那么会插入当前键,将第二个参数做为值.返回 1.如果当 ...

  8. loj6177 「美团 CodeM 初赛 Round B」送外卖2 最短路+状压dp

    题目传送门 https://loj.ac/problem/6177 题解 一直不知道允不允许这样的情况:取了第一的任务的货物后前往配送的时候,顺路取了第二个货物. 然后发现如果不可以这样的话,那么原题 ...

  9. IO流 读写文件

    读写文件 如前所述,一个流被定义为一个数据序列.输入流用于从源读取数据,输出流用于向目标写数据. 下图是一个描述输入流和输出流的类层次图. 下面将要讨论的两个重要的流是 FileInputStream ...

  10. js 中HTML的 onkeycode 和onkeydown属性事件

    <!DOCTYPE html><html><head><script>function displayResult(){var x=document.g ...