笨木头  2012-05-09 08:57     LGame     阅读(5630)     评论(6)
转载请注明,原文地址: http://www.benmutou.com/archives/230
文章来源:笨木头与游戏开发

LGame学堂011简单控件之解决添加控件后控件不显示的问题

 

关键字:LGame 入门 控件

 

-

位,不好意思,之前忘了说一个很重要的问题,也许有些朋友已经遇到这个问题了。那就是,明明创建了控件,也调用了add函数,控件也已经设为可见了,但控件就是不显示。

1.们是怎么创建控件的呢?当然是在构造器里咯:

public class GameScreen extends Screen {
 
        
 
        public GameScreen() {
 
                createBtn();
 
        }
 
        
 
        private void createBtn() {
 
                LButton btn = new LButton("assets/btn.png");
 
                add(btn);
 
        }
 
}


好吧,这很糟糕,因为这个按钮永远都不会显示出来了。


2.实,要解决这个问题,只需要一个步骤:


不要在构造器里添加控件,要在onLoad函数中添加控件。


@Override
 
        public void onLoad() {
 
btn = new LButton("笨木头", 100, 100, 4, 4);
 
add(btn);
 
    }


3.onLoad()函数是Screen的一个函数(好吧,我好像说了废话...),其实它也是一个钩子函数(不准告诉我你不知道钩子函数~你没有认真看我之前的文章,好伤心~),或者用设计模式的术语来说,就是“将父类的实现延迟到子类中”(糟糕,顿时觉得我好专业~忽略吧,管它什么设计模式呢~懂了就好)。



方文档说,onLoad函数使用了异步操作,可以在这个函数里做一些耗时的初始化操作。哎吖,其实我们别管它异步不异步了,其实我们之前创建了控件,却不显示的问题。全都是desktop的错。



4.果你有看过Screen的源码,刚好有看到了onCreate函数,那就会明白了,我们一起来看看:

/**
 
         * 当Screen被创建(或再次加载)时将调用此函数
 
         * 
         * @param width
 
         * @param height
 
         */
 
        public void onCreate(int width, int height) {
 
                ...
 
                this.desktop = new Desktop(baseInput, width, height);
 
                ...
 
        }


嘿,看到这么短的代码很兴奋是不是~其实是我干的坏事,因为我们只需要看这一句。desktop是在onCreate函数里初始化的,在这之前desktop一直都是null值。啥?这又跟我们讨论的问题有什么关系呢?有~再来看看我们是怎么添加控件的,我们是调用Screenadd函数来添加控件的,好了,捂着你的心脏,别被气疯咯:

/**
 
         * 添加游戏组件
 
         * 
         * @param comp
 
         */
 
        public void add(LComponent comp) {
 
                if (desktop != null) {
 
                        desktop.add(comp);
 
                }
 
        }


5.~~终于抓到凶手了~因为在onCreate函数执行之前,desktop一直都是null值,而我们在构造器里添加控件之后不起作用。对了~!你已经想到了吧?那就是因为,Screen的构造器是先被执行的,其后再执行onCreate函数。那么,在构造器里,desktop永远都是null值,我们又怎么能在这里添加控件呢?



为什么,为什么没有人问我为什么我要给这篇文字编号呢?~我编号12345有什么规律呢?~

嘿嘿,好吧,那我就回答你吧~

没有规律~觉得好玩~觉得文字有点长,怕你看不下去,就编编号咯~



呼呼~我啰嗦完了~希望没有气到你~

那么,下次再和你唠叨哈~我最可爱的读者。

 

 

 

原文第一次发布于Android-Fans论坛:

http://www.android-fans.net/forum.php?mod=viewthread&tid=1623&page=1&extra=#pid4912

 

 

6 条评论
  • shisayokoso 2012-10-06 22:39:00

    博主挺用心的,支持
    0回复
  • zt12101212 2012-11-02 00:20:00

    有种当年学校里追小说的感觉了。。。坚持写下去
    0回复
  • musicvs 2012-11-02 08:08:00

    [reply]shisayokoso[/reply]
    谢谢~
    0回复
  • musicvs 2012-11-02 08:09:00

    [reply]zt12101212[/reply]
    要有点让你失望了呢,因为只写到16篇。。。
    0回复
  • apa67596500 2012-11-04 09:03:00

    兄台 问个问题。 add按钮之后,按钮还是在大的背景之下吧~ 如何放置到背景之上呢。
    0回复
  • musicvs 2012-11-04 21:28:00

    [reply]apa67596500[/reply]
    不是很明白你说的“大背景之下”是什么意思。。。
    0回复
发表评论
粤ICP备16043700号

本博客基于 BlazorAnt Design Blazor 开发