真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Egret之Sound壓縮方案

一 : 前景

如果一個游戲需要一次預(yù)加載多個Sound(比如說10個),傳統(tǒng)的方案那就需要網(wǎng)絡(luò)請求10次來加載這些資源.耗費在網(wǎng)絡(luò)上的時間成本是很大的.那么方案來了 : 壓縮Sound!我前段時間糾結(jié)于將Sounds壓縮到Zip中,然后解壓成一個一個的Sound來播放.But,隨之而來的問題是,我沒有找到方法或者是API能將Zip中的Sound資源還原成egret.Sound對象.其實我挺喜歡這種方案的,奈何能力有限,如有讀者有這方面的方法或者思路請留言或者私信我,不勝感激.最后我找到了另一種方案 : 將所有的Sounds拼接到一個Sound文件中.如將10個Mp3拼接到1個Mp3中.本文講解此方案的實現(xiàn):

十載的波密網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。營銷型網(wǎng)站建設(shè)的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整波密建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。成都創(chuàng)新互聯(lián)公司從事“波密網(wǎng)站設(shè)計”,“波密網(wǎng)站推廣”以來,每個客戶項目都認(rèn)真落實執(zhí)行。

二 : 實現(xiàn)

Ⅰ: 音效方面

我將飄金幣的音效(money.mp3)和踢足球的音效(football.mp3)按順序拼接在了一個mp3文件中(golds_football.mp3),其中在0.674秒進(jìn)入到football.mp3的播放.如圖:
Egret之Sound壓縮方案

Ⅱ:播放器的實現(xiàn)(DemoSound)

module demo{
    /**
     * 音樂Demo
     * 一個MP3中分段播放多個音效
     * 
     *     目的 : 將幾個短的音效拼接成一個mp3文件,這樣減少網(wǎng)絡(luò)請求,可以加快加載進(jìn)度.尤其是零碎音效比較多的情況
     * 
     * @author Aonaufly
     */
    export class DemoSound{
        private static _instance : DemoSound = null;
        public static get Instance() : DemoSound{
            if( !DemoSound._instance )
                DemoSound._instance = new DemoSound();
            return DemoSound._instance;
        }

        private _sound : egret.Sound = null;
        private _soundChannel : egret.SoundChannel = null;
        private _is_playing : boolean = false;
        private _interval_id : number = null;

        private readonly _sound_start : Array = null;
        private _over_position : number = null;
        private constructor(){
            this._sound_start = [
                0,
                0.674
            ];
        }

        public play( $ty : TYPE_SOUND ) : void{
            if( !this._is_playing ){
                this._is_playing = true;
                if( !this._sound )
                    this._sound = RES.getRes(`golds_football_mp3`);
                let $start_postion : number = null;
                switch( $ty ){
                    case TYPE_SOUND.___MONEY___:
                        $start_postion = this._sound_start[0];
                        this._over_position = this._sound_start[1] - 0.001;
                        break;
                    case TYPE_SOUND.___FOOTBALL___:
                        $start_postion = this._sound_start[1];
                        this._over_position = null;
                        break;
                }
                this._soundChannel = this._sound.play( $start_postion,1 );
                this.listener2Handler( true );
            }
        }

        private listener2Handler( $isAdd : boolean ) : void{
            if( $isAdd ){
                this._interval_id = setInterval(
                    this.onLoopCheck.bind(this),
                    10
                );
                if( !this._soundChannel.hasEventListener(egret.Event.SOUND_COMPLETE) )
                    this._soundChannel.addEventListener( egret.Event.SOUND_COMPLETE , this.onTimeUpdate , this );
            }else{
                if( this._interval_id && this._interval_id > 0 ){
                    clearInterval( this._interval_id );
                    this._interval_id = 0;
                }
                if( this._soundChannel.hasEventListener(egret.Event.SOUND_COMPLETE) )
                    this._soundChannel.removeEventListener( egret.Event.SOUND_COMPLETE , this.onTimeUpdate , this );
                this._is_playing = false;
            }
        }

        private onTimeUpdate( $e : egret.Event ) : void{
            if(!this._over_position){
                egret.log(`播放完畢!!!`);
                this.sound_over();
            }else{
                if( this._soundChannel.hasEventListener(egret.Event.SOUND_COMPLETE) )
                    this._soundChannel.removeEventListener( egret.Event.SOUND_COMPLETE , this.onTimeUpdate , this );
            }
        }

        private onLoopCheck() : void{
            if( this._over_position ){
                let $position : number = this._soundChannel ? this._soundChannel.position : 0;
                egret.log(`sound pos : ${$position}`);
                if( $position >= this._over_position ){
                    this._soundChannel.stop();
                    this.sound_over();
                }
            }else{
                if( this._interval_id && this._interval_id > 0 ){
                    clearInterval( this._interval_id );
                    this._interval_id = 0;
                }
            }
        }

        private sound_over() : void{
            this.listener2Handler(false);
        }

    }

    export enum TYPE_SOUND{
        ___MONEY___ = 1,
        ___FOOTBALL___ = 2
    }
}

解釋 :
① :
this._sound_start = [
0,
0.674
];
0 : money音效播放的position(秒) / 0.674 : football音效播放的position
②:
export enum TYPE_SOUND{
MONEY= 1,
FOOTBALL= 2
}
MONEY: 播momey音效 / FOOTBALL: 播football音效

Ⅲ : 交互界面

Egret之Sound壓縮方案
注意 : 每一種音效播放完畢后 , 才能繼續(xù)播放音效

三 : 效果

Egret之Sound壓縮方案

四:資源

源碼


文章題目:Egret之Sound壓縮方案
文章鏈接:http://weahome.cn/article/gpjpsd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部