成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Egret制作Loading頁(yè)面及分步加載資源教程

shiyang6017 / 2748人閱讀

摘要:為避免加載資源時(shí)游戲黑屏,導(dǎo)致玩家誤認(rèn)為游戲非正常運(yùn)行,界面起到至關(guān)重要的作用。今天就為大家?guī)碛弥谱黜?yè)面及分步加載資源的教程。在中測(cè)試分步加載資源,原有的頁(yè)面上加上一個(gè)按鈕,添加加載資源事件。

我們都知道,當(dāng)游戲越做越大,資源越來越多的時(shí)候,加載資源會(huì)造成大量時(shí)間的浪費(fèi)。為避免加載資源時(shí)游戲黑屏,導(dǎo)致玩家誤認(rèn)為游戲非正常運(yùn)行,Loading界面起到至關(guān)重要的作用。今天就為大家?guī)碛肊gret制作Loading頁(yè)面及分步加載資源的教程。

本文涉及以下內(nèi)容:

· RES加載Loading界面所使用的資源
· 分步加載資源

加載LoadingUI所需要的資源

把LoadingUI所需要的資源配置到default.res.json的loading組中,組名任意。如下:

在Main.ts修改loadResource()函數(shù)資源的加載順序,先把LoadingUI所需要的資源異步加載成功,再創(chuàng)建LoadingUI的實(shí)例。

 private async loadResource() {
        try {
            await RES.loadConfig("resource/default.res.json", "resource/");//加載配置表
            await RES.loadGroup("loading");//加載loading組
            const loadingView = new LoadingUI();//創(chuàng)建loadingUI實(shí)例
            this.stage.addChild(loadingView);
            await RES.loadGroup("preload", 0, loadingView);//加載默認(rèn)preload組資源,并執(zhí)行l(wèi)oadingView
            this.stage.removeChild(loadingView);
        }
        catch (e) {
            console.error(e);
        }
    }

如此,資源配置完畢之后就可以在LoaingUI中使用了,下面制作LoaingUI界面.

制作LoadingUI界面

本文事例中顯示資源真實(shí)加載百分比和圖片百分比,參照如下LoadingUI代碼。

class LoadingUI extends egret.Sprite implements RES.PromiseTaskReporter {

    public constructor() {
        super();
        this.createView();
    }
    /**百分比位圖 */
    private textField: egret.BitmapText;
    /**loadicon */
    private load:egret.Bitmap;
    /**百分比圖片 */
    private loadBar:egret.Bitmap;
    /**loadBar背景 */
    private loadBar2:egret.Bitmap;

    private createView(): void {
        this.textField = new egret.BitmapText();
        let fnt = RES.getRes("num_fnt");//加載字體位圖
        this.textField.text = "0%";
        this.textField.font = fnt;
        this.textField.textAlign = "center",
        this.textField.x = 260,
        this.textField.y = 550,
        this.textField.width = 130,
        this.textField.height = 100;

        let bg:egret.Bitmap = new egret.Bitmap(RES.getRes("loadingBG_jpg"));
        this.addChild(bg);
        this.load = new egret.Bitmap(RES.getRes("loading_json.loading_icon_png"));
        this.load.anchorOffsetX = this.load.width / 2;
        this.load.anchorOffsetY = this.load.height / 2;
        this.load.x = 640 / 2;
        this.load.y = 1136 / 2;
        this.addChild(this.load);

        this.loadBar2 = new egret.Bitmap(RES.getRes("loading_json.loading_bar1_png"));
        this.loadBar2.x = (640 - this.loadBar2.width) / 2;
        this.loadBar2.y = (1136 - this.loadBar2.height) / 2;
        this.addChild(this.loadBar2);

        this.loadBar = new egret.Bitmap(RES.getRes("loading_json.loading_bar2_png"));
        this.loadBar.x = (640 - this.loadBar.width) / 2;
        this.loadBar.y = (1136 - this.loadBar.height) / 2;
        this.addChild(this.loadBar);
    }
    public onProgress(current: number, total: number): void {
        /**顯示百分比 */
        this.textField.text = Math.ceil((current/total)*100).toString() + "%";
        //遮罩
        let mask = this.getSectorProgress(Math.ceil((current/total) * 360));
        this.addChild(mask)
        this.loadBar.mask = mask;
        this.addChild(this.textField);
    }
    /**loadBar遮罩 */
    private getSectorProgress(angle: number):egret.Shape {
            var self = this;
            var shape:egret.Shape = new egret.Shape();
            changeGraphics(angle);
        return shape;
        //繪制shape遮罩
        function changeGraphics(angle) {
            shape.graphics.clear();
            shape.graphics.beginFill(16711680);
            shape.graphics.moveTo(self.loadBar.x, self.loadBar.y);
            shape.graphics.lineTo(self.loadBar.x + self.loadBar.width /2 , self.loadBar.y + self.loadBar.height / 2);
            shape.graphics.drawArc(self.loadBar.x + self.loadBar.width /2, self.loadBar.y + self.loadBar.height / 2, self.loadBar.width / 2, 0, angle * Math.PI / 180);
            shape.graphics.lineTo(self.loadBar.x + self.loadBar.width /2, self.loadBar.y + self.loadBar.height / 2);
            shape.graphics.endFill();
        }
    }
}

LoadingUI制作完畢,現(xiàn)在運(yùn)行,即可看到效果。

分步加載資源

分步加載資源和LoadingUI加載方式相同,也同樣是為了避免一次性加載太多的資源而造成時(shí)間的浪費(fèi),加載的同時(shí)也可以運(yùn)行LoadingUI。在資源配置表中繼續(xù)增加資源組testRES,多加一些preload和loading之外的資源,效果更佳明顯。

在Main.ts中測(cè)試分步加載資源,原有的頁(yè)面上加上一個(gè)按鈕,添加加載資源事件。

  //跳轉(zhuǎn)場(chǎng)景加載資源測(cè)試
        let textBtn: egret.TextField = new egret.TextField();
        textBtn.text = "Click! 跳轉(zhuǎn)場(chǎng)景";
        textBtn.touchEnabled = true;
        textBtn.x = 300;
        textBtn.y = 500;
        this.addChild(textBtn);
        textBtn.addEventListener(egret.TouchEvent.TOUCH_TAP, this.onTextBtnClick, this);

    private async onTextBtnClick() {
        const loadingView = new LoadingUI();//創(chuàng)建loadingUI實(shí)例
        this.stage.addChild(loadingView);
        await RES.loadGroup("testRES", 0, loadingView);//加載默認(rèn)preload組資源,并執(zhí)行l(wèi)oadingView
        this.stage.removeChild(loadingView);
        this.addChild(new TestPanel());
    }

按鈕方法關(guān)鍵詞async,使用異步加載執(zhí)行此事件。測(cè)試分步加載資源TestPanel類


class TestPanel extends egret.Sprite {
    public constructor() {
        super();
        this.init();
    }

    private init() {
        //原有資源
        let bg: egret.Bitmap = new egret.Bitmap( RES.getRes("loadingBG_jpg"));
        this.addChild(bg);
        //testRES組新的資源
        let icon_1: egret.Bitmap = new egret.Bitmap(RES.getRes("sjdj_bg2_png"));
        this.addChild(icon_1);
    }
}

小結(jié):
通過本文您可以學(xué)到Loading頁(yè)面制作方法以及資源分步加載思想,有任何技術(shù)問題或者認(rèn)為這篇文章對(duì)您有所幫助,歡迎在評(píng)論區(qū)留言與我們交流互動(dòng)!
本文源碼素材鏈接:https://github.com/shenysun/L...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/98902.html

相關(guān)文章

  • 紋理集打包和動(dòng)畫轉(zhuǎn)換工具Texture Merge的使用教程

    摘要:對(duì)的要求基本沒有,都能繪制出來,但是動(dòng)畫制作方式存在不同,可能某些幀不能完全繪制出來。目前對(duì)是有要求的本身必須是個(gè)多幀,如果只作為容器嵌套其他子項(xiàng)的做法將不會(huì)被繪制。點(diǎn)擊播放按鈕可以預(yù)覽動(dòng)畫,默認(rèn)幀率為。 Texture Merger 可將零散紋理拼合為整圖,同時(shí)也可以解析SWF、GIF動(dòng)畫,制作Egret位圖文本,導(dǎo)出可供Egret使用的配置文件,其紋理集制作功能在小游戲開發(fā)中可以起...

    robin 評(píng)論0 收藏0
  • 菜鳥| 微信小游戲好友排行榜教程

    摘要:今天我們分享的菜鳥文檔將介紹微信小游戲好友排行榜的制作過程,包括創(chuàng)建項(xiàng)目并發(fā)布微信開發(fā)者平臺(tái)添加小游戲打開開放域功能主域和開放域通訊,以及與原生的布局。 寫在前面:隨著越來越多的新人開始接觸白鷺引擎,創(chuàng)作屬于自己的游戲??紤]到初學(xué)者會(huì)遇到一些實(shí)際操作問題,我們近期整理推出菜鳥系列技術(shù)文檔,以便更好的讓這些開發(fā)者們快速上手,Egret大神們可以自動(dòng)忽略此類內(nèi)容。 今天我們分享的菜鳥文檔將...

    libxd 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<