Egret引擎隨學隨機


1.紋理集實際上就是將一些零碎的小圖放到一張大圖當中。游戲中也經常使用到紋理集。使用紋理集的好處很多,我們通過將大量的圖片拼合為一張圖片從而減少網絡請求,原先加載數次的圖片資源現在加載一次即可。同時,在引擎渲染的時候也會減少IO讀取,從而提高性能。

2.只要發生事件,Flash就會調度事件對象。如果事件目標不在顯示列表中,則Flash Player或AIR將事件對象直接調度到事件目標。例如,Flash Player將process事件對象直接調度到URLStream對象。但是,如果事件目標在顯示列表中,則FlashPlayer將事件對象調度到顯示列表,事件對象將在顯示列表中穿行,直到到達事件目標。

3.TypeScript基本數據類型:Boolean,Number,String,Array,Enum,Any,Void。

4.Egret GUI系統的特性:

(1).皮膚分離機制:皮膚分離機制就是把GUI控件的外觀與邏輯處理分離開來。控件的邏輯代碼只負責動態的邏輯處理,如事件監聽和數據刷新。而皮膚部件只負責控件的外觀,如實例化子項,設置控件的樣式和布局等靜態的屬性。

(2).失效驗證機制

(3).自適應流式布局

5.Egret中的事件機制:事件發送者.addEventListener(事件類型,偵聽器,this);

6.Egret命令行介紹

(1)build:構建制定項目,編譯制定項目的TypeScript文件

(2)create:創建新項目

(3)create_app:從h5游戲生成app

(4)create_mainfest:在工程目錄下生成manifest.json清單文件

(5)info:獲取Egret信息

(6)publish:發布項目,使用GooleClosureCompiler壓縮代碼

(7)startserver:啟動HttpServer,並在默認瀏覽器中打開指定項目。

(8)upgrade:升級項目代碼

7.加載游戲資源:

RES.addEventListener(RES.ResourceEvent.CONFIG_COMPLETE,this.onConfigComp,this);

RES.loadConfig("resource/resource.json","resource/");

8.核心顯示類

Egret中一共封裝了7個顯示相關的核心類,一個接口,具體繼承結構如下:

(1)DisplayObject:顯示對象基類,所有顯示對象均繼承自此類

(2)Bitmap:位圖,用來顯示圖片

(3)Shap:用來顯示矢量圖,可以使用其中的方法繪制矢量圖形

(4)DisplayObjectContainer:顯示對象容器接口,所有顯示對象容器均實現此接口

(5)Sprite:輕量級顯示容器

(6)Stage:舞台類

(7)TextField:文本類

(8)TextInput:輸入文本類

9.顯示對象的全部可視屬性:

(1)alpha:透明度

(2)width:寬度

(3)height:高度

(4)rotation:旋轉角度

(5)scaleX:橫向縮放

(6)scaleY:縱向縮放

(7)skewX:橫向斜切

(8)skewY:縱向斜切

(9)visible:是否可見

(10)x:X軸坐標值

(11)y:Y軸坐標值

10.var isHit:boolean=shp.hitTestPoint(10,10);

hitTestPoint這個方法是執行一次碰撞檢測,檢測的對象是當前shp是否與坐標為(10,10)的點發生了碰撞。如果發生碰撞,則方法返回true,如果沒有發生碰撞,則返回false。

11.若要確定對象相對於全局舞台坐標的位置,可以使用任何顯示對象的globalToLocal()方法將坐標從全局(舞台)坐標轉換為本地(顯示對象容器)坐標。同樣也可以使用DisplayObject類的localToGlobal()方法將本地坐標轉換為舞台坐標。

12.通過觸摸來移動顯示對象,當手指按到屏幕時監聽TOUCH_MOVE事件,然后每次手指移動時都會調用此函數,使拖到的對象跳到手指所在的x,y坐標。當手指離開屏幕后取消監聽,對象停止跟隨。

13.如果顯示對象太大,不能在要顯示它的區域中完全顯示出來,則可以使用scrollRect屬性定義顯示對象的可查看區域。此外,通過更改scrollRect屬性,可以使內容左右平移或上下移動。

14.被緩存的對象依然可以更新它內部的對象,這時將自動重新創建緩存。將顯示對象的cacheAsBitmap屬性設置為true就會把顯示對象緩存成位圖形式。DisplayObject類的scrollRect屬性與使用cacheAsBitmap屬性的位圖緩存有關。只有將cacheAsBitmap設置為true時,才能看到scrollRect屬性帶來的性能優勢。

15.每個顯示對象都有blendMode屬性,可以將其設置為下了混合模式(egret.BlendMode.NORMAL,egret.BlendMode.ADD,egret.BlendMode.ERASE)之一。

16.如要指明一個顯示對象將是另一個顯示對象的遮罩,請將遮罩對象設置為被遮罩的顯示對象的mask屬性。

17.Egret v2.5.0Game擴展庫包含下面的API:

(1)egret.MovieClip:影片剪輯,可以通過影片剪輯播放序列動畫。

(2)egret.MovieClipData:使用MovieClipData類。

(3)egretl.MovieClipDataFactory:使用MovieClipDataFactory類,可以生成MoiveClipData對象用於創建MovieClip。

(4)egret.MovieClipEvent:當動畫的當前偵有事件,將調度MovieClipEvent對象。幀事件類型MovieClipEvent.FRAME_LABEL.

(5)egret.ScrollView:ScrollView是用於滑動的輔助類,將一個顯示對象傳入構造函數即可。

(6)egret.URLLoader:URLLoader類以文本、二進制數據或URL編碼變量的形式從URL下載數據

(7)egert.URLLoaderDataFormat:URLLoaderDataFormat類提供了一些用於指定如何接受已下載數據的值。

(8)egert.URLRequest:URLRequest類可捕獲單個HTTP請求中的所有信息。

(9)egret.URLRequestHeader:HRLRequestHeader對象封裝了一個HTTP請求標頭並由一個名稱/值對組成。

(10)egret.URLRequestMethod:URLRequestMethod類提供了一些值,這些值可指定在將數據發送到服務器時,URLRequest對象應使用POST方法還是GET方法

(11)egret.URLVariables:使用URLVariable類可以在應用程序和服務器之間傳輸變量。

(12)egret.MainContext:是游戲的核心平台接口

18.Egret v2.5.0Tween擴展庫API

(1)egret.Ease:緩存函數集合,使用不同的緩存函數使得動畫按照對應的方程進行。

(2)egret.Tween:Tween是Egret的動畫緩存類

19.粒子系統的主要類職責:

(1)particle:粒子類,定義了粒子的基礎參數,如:xy坐標、旋轉、縮放等。

(2)ParticleSystem:粒子庫基類,包括粒子庫所必須的一些方法

(3)GravityParticle:繼承自Particle,定義了GravityParticle所需要的各項參數

(4)GravityParticleSystem:繼承自ParticleSystem,通過傳入的配置實現重力粒子系統

20.(1)egret.Event.COMPLETE:版本控制加載完成時拋出。

(2)egret.IOErrorEvent.IO_ERROR 版本控制加載失敗時拋出。

22gret資源加載機制:對於外部資源,就要使用資源加載機制。在Flash中是用Loader或URLoader。Egret中也提供了Loader的類似實現,即:RES.ResourceLoader。(注意ResourceLoader的命令空間是RES,而不是egret)。但Egret得封裝更“上層”一些,您甚至都無需直接接觸ResourceLoader這個類,而是直接使用Egret提供的,結合外部配置文件的資源管理和加載方式。

23.精靈表單:在使用位圖時,還經常用到“精靈表單”,即spritesheet,精靈表單就是把若干張小圖集合到一張大圖上,這樣對資源加載,控制,減少請求數等方面都很有益處。制作spritesheet的工具也有很多,比如TexturePacker,FlashCS6也增加了對spritesheet的支持,您可以選擇適合自己的工具。在Egret框架中當然也可以使用spritesheet。

24.MoiveClip(動畫片段):MoiveClip相當於一個小的動畫片段,其中包含了多個單獨的幀(圖片),在連續播放時,就形成了動畫(或小電影片段)的效果。MoiveClip在Flash中經常使用,在Egret中也可以進行使用。

25.Egret文本:文本是創建游戲時的必要要素。要了解Egret文本,需要先了解Egret中“DisplayObject(顯示對象)”的概念。

26.Egret顯示對象:“顯示對象”,是可以在舞台上顯示的對象。可以顯示的對象,即包括可以直接看見的圖像、文字、視頻、圖片等,也包括不能看見但真實存在的顯示對象容器。

27.文本類型

(1)普通文本:能夠正常的顯示各種文本,文本內容可以被程序設置,是常用的文本類型。

(2)輸入文本:可以被用戶輸入的文本,常用於登陸中的輸入框或者游戲中的聊天窗口。

(3)位圖文本:使用位圖文字來渲染的文本,常用於游戲中需要加特殊字體效果的文本。

28.egret.localStorage.全局函數。

顯示繼承的公共方法。

(1)clear():void   將所有數據清空

(2)getItem(key:string):string   讀取數據

(3)removeItem(key:string):void   刪除數據

(4)setItem(key:string,value:string):boolean   保存數據

29.Egret中的物體主要有兩種:

(1)顯示物體

(2)顯示容器:顯示容器可以理解為“可見顯示物體”的一個載體,顯示容器在場景中是不可見的。

30.顯示物體屬性

(1)alpha:透明度

(2)width:寬度

(3)height:高度

(4)rotation:旋轉角度

(5)scaleX:橫向縮放

(6)scaleY:縱向縮放

(7)skewX:橫向斜切

(8)skewY:縱向斜切

(9)visible:是否可見

(10)x:X軸坐標值

(11)y:Y軸坐標值

31.Egret中可以直接使用程序來繪制一些簡單的圖形,這些圖形在運行時都會進行實時繪圖。要進行繪圖操作,我們需要使用Graphics這個類。但並非直接使用。一些顯示對象中已經包含了繪圖方法,我們可以直接調用這些方法來進行繪圖。Graphics中提供的繪圖方法共有四種:a.繪制矩形,b.繪制圓形C.繪制直線D.繪制曲線。

32.在Egret中,我們有三種類型的文本可以選擇,分別為“普通文本”、“輸入文本”和“位圖文本”。這些不同類型的文本在不同的場景中使用。對於不同類型的文本,其操作方式可能會有所不同。三種類型的文本特點如下:

(1)普通文本:能夠正常的顯示各種文本,文本內容可以被程序設置,最為常見的文本類型。

(2)輸入文本:可以被用戶輸入的文本,常用於登陸中的輸入框或者游戲中的聊天窗口。

(3)文圖文本:使用位圖文字來渲染的文本,常用於游戲中需要加特殊字體效果的文本。

33.動畫:

(1)Tween緩存動畫:通常情況下,游戲中或多或少都會帶有一些緩存動畫。例如界面彈出,或者道具飛入飛出的特效等等。在制作這些緩存動畫的時候我們僅僅希望簡單的辦法實現這種移動或者變形縮放的效果。Egret中的Tween緩存動畫類就為我們提供了相關的功能。

(2)MovieClip序列幀動畫:MovieClip又稱之為“影片剪輯”,是Egret中提供的一種動畫解決方案。我們通常會將MovieClip簡寫為“mc”。實際上一個mc所實現的功能就是播放序列幀動畫。當我們想實現一個任務跑動的動作時,需要將原有的動畫制成為能夠被Egret識別的動畫格式。然后將這些制作好的資源進行加載,最后播放。

34.Egret中的音頻系統接種HTML5的Audio系統,這使得Egret的音頻兼容絕大多數瀏覽器。在音頻文件格式中Egret僅支持MP3格式。由於音頻文件屬於資源的一部分,所以在游戲邏輯中,使用音頻前需要預先加載音頻資源。

35.Egret顯示對象:(1)直接繼承自DisplayObject的類都屬於非容器。(2)繼承自DisplayObjectContainer的類都屬於容器。

36.打開性能面板:egret.Profiler.getInstance().run();

(1)draw:這個參數描述了當前畫面渲染時候drawcall的次數

(2)cost:這里四個參數,EnterFrame階段的開銷,引擎updateTransform開銷,引擎draw開銷,HTML5中canvas.draw的開銷

(3)FPS:當前畫面的幀頻。

37.DisplayObject類是所有顯示對象的父類。

38.Egret中的顯示對象DisplayObject擁有四個派生類,分別為:

(1)Bitmap(2)Shape(3)TextField(4)TextInput

這四個派生類實現了不同的功能:

(1)Bitmap進行位圖顯示和操作。

(2)Shape是可以進行矢量圖繪制的顯示對象。

(3)TextField和TextInput都屬於文本操作。

39.所謂遮罩就是指定一個顯示對象哪些部分可以顯示,哪些部分不可以顯示。Egret啟用遮罩功能非常的簡單,在DisplayObject中,我們暴露了一個名稱為Mask的屬性,該屬性就是用來指定遮罩部分的。

40.自定義顯示對象類需要繼承自DisplayObject的具體子類。

41.每一個顯示對象都包含錨點,該錨點默認位於顯示對象的左上角。當設置一個顯示對象的坐標位置時,我們會以錨點為參考改變顯示對象繪圖位置。同時,錨點相對於顯示對象的位置也是可以改變的。

42.Egret顯示列表只是針對於Egret的顯示容器物體。

43.Egret中的事件機制是一套業內標准的事件處理架構。Egret中,事件模型定義了一套標准的生成和處理事件消息的方法,使程序中的對象可以相互交互,通信,保持自身狀態和相應變化。簡單的說,數據的提供者只管發出數據對象,只要確保數據對象是egret.Event類或者子類的實例即可。這種數據對象,稱為事件(Event)。數據對象的發出者,稱之為事件發送者(Event dispatcher)。同時,接受事件的對象,稱為事件偵聽者(Event listener)。

44.事件機制包含4個步驟:注冊偵聽器,發送事件,偵聽事件,移除偵聽器。這四個步驟是按照順序來執行的。

45.Event類是所有事件類的基類。當你你要創建一個自定義事件的時候,事件應該繼承自Event類。同時Event類也包含一些事件。這些事件通常與顯示列表、顯示對象的狀態有關。

46.事件偵聽器也就是事件的處理者,負責接收事件攜帶的消息,並在接收到該事件后執行特定的代碼。創建偵聽器,注冊偵聽器與移除偵聽器,檢測偵聽器。

47.事件是可以設置優先級的,這是一個非常方便而且靈活的功能。我們可以通過制定事件的優先級來確保那個事件偵聽器會得到提前處理。你可以在注冊偵聽器的時候制定事件的優先級。

48.位圖的使用離不開紋理的支持,在Egret中,我們默認隱藏了紋理的操作,所有操作針對於顯示對象進行。但位圖的顯示依然基於紋理。在顯示一張圖片時,我們需要使用Bitmap類。這是egret中的圖片類,而紋理則來自於我們加載的資源圖片。通常情況下,我們會使用單張圖片作為紋理,游戲中也會大量使用紋理集來進行渲染。

49.所有顯示對象都可以添加EnterFrame偵聽器,用於處理幀事件

  private createScene():void {
        var sprite: egret.Sprite = new egret.Sprite();
        sprite.addEventListener(egret.Event.ENTER_FRAME,this.onEnterFrame,this);
       
    }
    private onEnterFrame()
    { 
        console.log("aaaa");
    }
View Code

50.Timer類實現計時器的功能

    private createScene():void {
        var timer: egret.Timer = new egret.Timer(1000);
        timer.addEventListener(egret.TimerEvent.TIMER,this.onTimerHandler,this);
        timer.start();
       
    }
    private onTimerHandler(event:egret.TimerEvent):void
    { 
        console.log("aaaa");
    }
View Code

51.Tween提供一組緩動算法

    private createScene():void {
        var sprite: egret.Sprite = new egret.Sprite();  
        //Tween的所有都以毫秒為單位
       egret.Tween.get(sprite).wait(2000).to({ x: 100 },1500).call(this.onComplete);
      //  egret.Tween.removeTweens(sprite);
    }
    private onComplete()
    { 
        console.log("aaaa");
       
    }
View Code

52.Event類作為創建Event對象的基類,當發生事件時,Event對象將作為參數傳遞給事件偵聽器。

    private createScene():void {
        var eventDispatcher: egret.EventDispatcher = new egret.EventDispatcher();
        //注冊和刪除偵聽的時候一定要傳入this,這里和Flash區別
        eventDispatcher.addEventListener("MyEvent",this.onEventHandler,this);
        eventDispatcher.dispatchEvent(new egret.Event("MyEvent",false,false));
    }
    private onEventHandler(event:egret.Event):void
    { 
        var type: string = event.type;
        console.log("------" + type);//------MyEvent
        event.stopImmediatePropagation();
        event.stopPropagation();   
    }
View Code

53.TextField是egret的文本渲染類,采用瀏覽器/設備的API進行渲染,在不同的瀏覽器/設備中由於字體渲染方式不一,可能會有渲染差異。

54.URLLoader類以文本、二進制數據或URL編碼變量的形式從URL下載數據。在下載文本文件、XML或其他用於動態數據驅動應用程序的信息時,它很有用。

55.MouseEvent:鼠標事件相關。由於js的this是動態地,所以添加和刪除事件的時候,需要傳入this參數。

  private createScene():void {
        var sprite: egret.Sprite = new egret.Sprite();
        sprite.addEventListener(egret.TouchEvent.TOUCH_TAP,this.onMouseHandler,this);
        sprite.addEventListener(egret.TouchEvent.TOUCH_BEGIN,this.onMouseHandler,this);
        sprite.addEventListener(egret.TouchEvent.TOUCH_END,this.onMouseHandler,this);
        sprite.addEventListener(egret.TouchEvent.TOUCH_MOVE,this.onMouseHandler,this,true);
    }
    private onMouseHandler(event: egret.TouchEvent): void {
        var stageX: number = event.stageX;
        var stageY: number = event.stageY;
        var localX: number = event.stageX;
        var localY: number = event.localY;
        var target: any = event.target;
        var currentTarget: any = event.currentTarget;
        console.log("======");
    }
View Code

56.egret.全局函數

顯示繼承的公共方法

(1)callLater(method:Function,thisObject:any,...args):void  延遲函數到屏幕重繪前執行

(2)clearInterval(key:number):void 清除制定延遲后運行的函數

(3)clearTimeout(key:number):void 清除制定延遲后運行的函數

(4)getDefinitionByName(name:string):any  返回name參數制定的類的類對象引用

(5)getOption(key:string):string:獲取瀏覽器或者Runtime參數,如果沒有設置返回空字符串在瀏覽器中相當於獲取url中參數,在Runtime獲取對應setOption參數。

(6)getQualifiedSuperclassName(value:any):string  返回value參數制定的對象的基類的完全限定類名

(7)getTimer():number 用於計算相對時間

(8)hasDefinition(name:string):boolean  檢查指定的應用程序域之內是否存在一個公共定義

(9)is(instance:any,typeName:string):boolean  檢查制定對象是否為Egret框架內制定接口或類或其子類的實例

(10)registerClass(classDefinition:any,className:string,interfaceNames:string[]):void 為一個類定義注冊運行時類信息,用此方法往類定義上注冊它自身以及所有接口對應的字符串。

(11)setInterval(listener:Function,this,Object:any,delay:number,...args):number 在指定的延遲(以毫秒為單位)間接循環調用指定的函數。

(12)setTimeout(listener:Funtion,thisObject:any,delay:number,...args):number 在指定的延遲(以毫秒為單位)后運行指定的函數。

(13)startTick(callBack:(timeStamp:number)=>boolean,thisObject:any):void 注冊並啟動一個計時器,通常會以60FPS的速率觸發回調方法,並傳入當前時間戳

(14)stopTick(callBack:(timeStamp:number)=>boolean,thisObject:any):void 停止之前用starTick()方法啟動的計時器

(15)superGetter(currentClass:any,thisObj:any,type:string):any 獲取父類的getter屬性值

(16)superSetter(currentClass:any,thisObj:any,type:string,...values)調用父類的setter屬性,代替其他語言的寫法,如super.alpha=1;

(17)toColorString(value:number):string轉換數字為顏色字符串

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM