Html5 Egret遊戲開發 成語大挑戰(八)通常性二級頁面處理

在遊戲中,咱們通常會有各類各樣的二級頁面,好比遊戲暫停界面或者遊戲結束界面,這些界面組成了對玩家交互主要手段,在遊戲開發中,對於這些界面的coding組織是很是有學問的,若是倒退到十年前,遊戲開發的老前輩們必定孜孜不倦的上課如何設計好「易讀」「可維護」「邏輯清晰」的界面代碼,本人曾深陷其中變得對代碼摳摳索索,結果事倍功半,緣由是什麼?老前輩們的一個項目或一段代碼多是長期維護長期使用的,而如今的高速code和超短的產品生命週期,使得徹底不用規劃那麼好的交互代碼,有時候可能過幾個月本身的代碼都不認得了,怎麼可能給別人去看明白。前面講那麼多,目的是說,這篇實現方式暴力簡單,只想快速完成不要搞那麼複雜的組件設計,UI規劃,如今講究的是速度,可能你會以爲和第9篇有點衝突,其實否則,等下篇出了我再告訴你爲啥。

如今打開春節前的項目吧,說實話,我也有點陌生了,此次只是現實一個gamewin的界面,直接在遊戲場景中實現勝利界面,在Wing先打開SceneGameSkin.exml文件,此時「可能」會出現界面不顯示,在輸出欄裏是這樣的:html

對於這個狀況,不知道爲何,彷佛是自定義控件形成的類解析錯誤,解決它很簡單,點擊上面的刷新按鈕:函數

一下就行了,如今找到組件拖進去一個Group來當Win界面的父容器。ui

而後,在設計界面裏設計好勝利的UI界面,在這裏直接將最終作好的結果給你們看吧:this

首先,有一個正解圖片底板,還有兩個Label來顯示解釋和出處,還有一個按鈕下一題,獎勵的UI是原版有的,因爲咱們不實現獎勵,因此,有興趣的能夠本身實現,界面的底層,加了一個半透明的eui.Rect來解決遮擋,讓UI看起來更加立體,下面是增長到scenegame.exml裏面的描述:spa

<e:Group id="group_win" left="0" top="0" bottom="0" right="0" visible="false">
    <e:Rect left="0" top="0" bottom="0" right="0" fillAlpha="0.53"/>
    <e:Image source="Result_png" horizontalCenter="0" verticalCenter="260"/>
    <e:Button id="btn_next" x="432" y="941">
        <e:skinName>
            <e:Skin states="up,down,disabled">
                <e:Image width="100%" height="100%" source="ResultBtn_png" source.down="ResultBtn1_png"/>
                <e:Label id="labelDisplay" horizontalCenter="0" verticalCenter="0"/>
            </e:Skin>
        </e:skinName>
    </e:Button>
    <e:Label id="lb_from" text="標籤" x="113" y="700" textColor="0x000000" multiline="true" width="501" height="65"/>
    <e:Label id="lb_explain" multiline="true" textColor="0x000000" text="標籤" height="127" y="805" width="501" x="113"/>
</e:Group>

下面是實現界面的代碼控制,打開SceneGame.ts文件,增長成員變量,和exml設計對應:設計

private group_win:eui.Group;//勝利界面的group控件
private btn_next:eui.Button;//下一個題目
private lb_explain:eui.Label;//解釋
private lb_from:eui.Label;//來源

實現兩個方法,一個是用來跳轉到下一個題目的,一個是顯示結果的:3d

private onclick_next(){
    //下一個題目
    this.group_win.visible = false;
    SceneLevels.Shared().OpenLevel(this.levelIndex + 1);
    this.InitLevel(this.levelIndex + 1);
     
}
private showWin(){
    this.group_win.visible = true;
    var leveldata = LevelDataManager.Shared().GetLevel(this.levelIndex);
    this.lb_from.text = leveldata.tip;
    this.lb_explain.text = leveldata.content;
}

在構造函數中增長下一個題目的事件註冊:code

this.btn_next.addEventListener(egret.TouchEvent.TOUCH_TAP,this.onclick_next,this);

在onclick_word方法裏替換以前的「console.log("win");」xml

this.showWin();

由於以前預留好了接口,只須要把邏輯實現便可,當遊戲勝利的時候將group_win組件visible爲true,並將Label賦值,當點擊下一題時,隱藏group_win並將題目刷新,同時將關卡地圖也刷新推動一個關卡。
最重顯示效果以下:htm

好了,本篇就已經結束,如今一個幾乎完整的遊戲已經差很少,只須要活用visible就能夠在一個UI下組織出全部的操做,在這裏沒有說到使用「狀態」,狀態能夠更加方便的設計UI操做,但本遊戲界面簡單,就不作詳細的講解。
本篇項目源碼:ChengyuTiaozhan5.zip(因爲博客園的文件大小限制,resource資源方面請到第二篇的後面下載) 

相關文章
相關標籤/搜索