【LGame入門學堂011.控制項篇】簡單控制項之解決添加控制項後控制項不顯示的問題

來源:互聯網
上載者:User

【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值。啥?這又跟我們討論的問題有什麼關係呢?有~再來看看我們是怎麼添加控制項的,我們是調用Screen的add函數來添加控制項的,好了,捂著你的心臟,別被氣瘋咯:

/**          * 添加遊戲組件          *          * @param comp          */         public void add(LComponent comp) {                 if (desktop != null) {                         desktop.add(comp);                 }         }

5.噢~~終於抓到兇手了~因為在onCreate函數執行之前,desktop一直都是null值,而我們在構造器裡添加控制項之後不起作用。對了~!你已經想到了吧?那就是因為,Screen的構造器是先被執行的,其後再執行onCreate函數。那麼,在構造器裡,desktop永遠都是null值,我們又怎麼能在這裡添加控制項呢?

為什麼,為什麼沒有人問我為什麼我要給這篇文字編號呢?~我編號1、2、3、4、5有什麼規律呢?~

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

沒有規律~覺得好玩~覺得文字有點長,怕你看不下去,就編編號咯~

呼呼~我囉嗦完了~希望沒有氣到你~

那麼,下次再和你嘮叨哈~我最可愛的讀者。

 

 

 

原文第一次發佈於Android-Fans論壇:

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

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.