1.紋理集實際上就是將一些零碎的小圖放到一張大圖當中。游戲中也經(jīng)常使用到紋理集。使用紋理集的好處很多,我們通過將大量的圖片拼合為一張圖片從而減少網(wǎng)絡(luò)請求,原先加載數(shù)次的圖片資源現(xiàn)在加載一次即可。同時,在引擎渲染的時候也會減少IO讀取,從而提高性能。
2.只要發(fā)生事件,F(xiàn)lash就會調(diào)度事件對象。如果事件目標不在顯示列表中,則Flash Player或AIR將事件對象直接調(diào)度到事件目標。例如,F(xiàn)lash Player將process事件對象直接調(diào)度到URLStream對象。但是,如果事件目標在顯示列表中,則FlashPlayer將事件對象調(diào)度到顯示列表,事件對象將在顯示列表中穿行,直到到達事件目標。
3.TypeScript基本數(shù)據(jù)類型:Boolean,Number,String,Array,Enum,Any,Void。
4.Egret GUI系統(tǒng)的特性:
(1).皮膚分離機制:皮膚分離機制就是把GUI控件的外觀與邏輯處理分離開來??丶倪壿嫶a只負責動態(tài)的邏輯處理,如事件監(jiān)聽和數(shù)據(jù)刷新。而皮膚部件只負責控件的外觀,如實例化子項,設(shè)置控件的樣式和布局等靜態(tài)的屬性。
(2).失效驗證機制
(3).自適應(yīng)流式布局
5.Egret中的事件機制:事件發(fā)送者.addEventListener(事件類型,偵聽器,this);
6.Egret命令行介紹
(1)build:構(gòu)建制定項目,編譯制定項目的TypeScript文件
(2)create:創(chuàng)建新項目
(3)create_app:從h5游戲生成app
(4)create_mainfest:在工程目錄下生成manifest.json清單文件
(5)info:獲取Egret信息
(6)publish:發(fā)布項目,使用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個顯示相關(guān)的核心類,一個接口,具體繼承結(jié)構(gòu)如下:
(1)DisplayObject:顯示對象基類,所有顯示對象均繼承自此類
(2)Bitmap:位圖,用來顯示圖片
(3)Shap:用來顯示矢量圖,可以使用其中的方法繪制矢量圖形
(4)DisplayObjectContainer:顯示對象容器接口,所有顯示對象容器均實現(xiàn)此接口
(5)Sprite:輕量級顯示容器
(6)Stage:舞臺類
(7)TextField:文本類
(8)TextInput:輸入文本類
9.顯示對象的全部可視屬性:
(1)alpha:透明度
(2)width:寬度
(3)height:高度
(4)rotation:旋轉(zhuǎn)角度
(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這個方法是執(zhí)行一次碰撞檢測,檢測的對象是當前shp是否與坐標為(10,10)的點發(fā)生了碰撞。如果發(fā)生碰撞,則方法返回true,如果沒有發(fā)生碰撞,則返回false。
11.若要確定對象相對于全局舞臺坐標的位置,可以使用任何顯示對象的globalToLocal()方法將坐標從全局(舞臺)坐標轉(zhuǎn)換為本地(顯示對象容器)坐標。同樣也可以使用DisplayObject類的localToGlobal()方法將本地坐標轉(zhuǎn)換為舞臺坐標。
12.通過觸摸來移動顯示對象,當手指按到屏幕時監(jiān)聽TOUCH_MOVE事件,然后每次手指移動時都會調(diào)用此函數(shù),使拖到的對象跳到手指所在的x,y坐標。當手指離開屏幕后取消監(jiān)聽,對象停止跟隨。
13.如果顯示對象太大,不能在要顯示它的區(qū)域中完全顯示出來,則可以使用scrollRect屬性定義顯示對象的可查看區(qū)域。此外,通過更改scrollRect屬性,可以使內(nèi)容左右平移或上下移動。
14.被緩存的對象依然可以更新它內(nèi)部的對象,這時將自動重新創(chuàng)建緩存。將顯示對象的cacheAsBitmap屬性設(shè)置為true就會把顯示對象緩存成位圖形式。DisplayObject類的scrollRect屬性與使用cacheAsBitmap屬性的位圖緩存有關(guān)。只有將cacheAsBitmap設(shè)置為true時,才能看到scrollRect屬性帶來的性能優(yōu)勢。
15.每個顯示對象都有blendMode屬性,可以將其設(shè)置為下了混合模式(egret.BlendMode.NORMAL,egret.BlendMode.ADD,egret.BlendMode.ERASE)之一。
16.如要指明一個顯示對象將是另一個顯示對象的遮罩,請將遮罩對象設(shè)置為被遮罩的顯示對象的mask屬性。
17.Egret v2.5.0Game擴展庫包含下面的API:
(1)egret.MovieClip:影片剪輯,可以通過影片剪輯播放序列動畫。
(2)egret.MovieClipData:使用MovieClipData類。
(3)egretl.MovieClipDataFactory:使用MovieClipDataFactory類,可以生成MoiveClipData對象用于創(chuàng)建MovieClip。
(4)egret.MovieClipEvent:當動畫的當前偵有事件,將調(diào)度MovieClipEvent對象。幀事件類型MovieClipEvent.FRAME_LABEL.
(5)egret.ScrollView:ScrollView是用于滑動的輔助類,將一個顯示對象傳入構(gòu)造函數(shù)即可。
(6)egret.URLLoader:URLLoader類以文本、二進制數(shù)據(jù)或URL編碼變量的形式從URL下載數(shù)據(jù)
(7)egert.URLLoaderDataFormat:URLLoaderDataFormat類提供了一些用于指定如何接受已下載數(shù)據(jù)的值。
(8)egert.URLRequest:URLRequest類可捕獲單個HTTP請求中的所有信息。
(9)egret.URLRequestHeader:HRLRequestHeader對象封裝了一個HTTP請求標頭并由一個名稱/值對組成。
(10)egret.URLRequestMethod:URLRequestMethod類提供了一些值,這些值可指定在將數(shù)據(jù)發(fā)送到服務(wù)器時,URLRequest對象應(yīng)使用POST方法還是GET方法
(11)egret.URLVariables:使用URLVariable類可以在應(yīng)用程序和服務(wù)器之間傳輸變量。
(12)egret.MainContext:是游戲的核心平臺接口
18.Egret v2.5.0Tween擴展庫API
(1)egret.Ease:緩存函數(shù)集合,使用不同的緩存函數(shù)使得動畫按照對應(yīng)的方程進行。
(2)egret.Tween:Tween是Egret的動畫緩存類
19.粒子系統(tǒng)的主要類職責:
(1)particle:粒子類,定義了粒子的基礎(chǔ)參數(shù),如:xy坐標、旋轉(zhuǎn)、縮放等。
(2)ParticleSystem:粒子庫基類,包括粒子庫所必須的一些方法
(3)GravityParticle:繼承自Particle,定義了GravityParticle所需要的各項參數(shù)
(4)GravityParticleSystem:繼承自ParticleSystem,通過傳入的配置實現(xiàn)重力粒子系統(tǒng)
20.egret.Event.COMPLETE:版本控制加載完成時拋出。
21.egret.IOErrorEvent.IO_ERROR 版本控制加載失敗時拋出。
22.gret資源加載機制:對于外部資源,就要使用資源加載機制。在Flash中是用Loader或URLoader。Egret中也提供了Loader的類似實現(xiàn),即:RES.ResourceLoader。(注意ResourceLoader的命令空間是RES,而不是egret)。但Egret得封裝更“上層”一些,您甚至都無需直接接觸ResourceLoader這個類,而是直接使用Egret提供的,結(jié)合外部配置文件的資源管理和加載方式。__define
23.精靈表單:在使用位圖時,還經(jīng)常用到“精靈表單”,即spritesheet,精靈表單就是把若干張小圖集合到一張大圖上,這樣對資源加載,控制,減少請求數(shù)等方面都很有益處。制作spritesheet的工具也有很多,比如TexturePacker,F(xiàn)lashCS6也增加了對spritesheet的支持,您可以選擇適合自己的工具。在Egret框架中當然也可以使用spritesheet。
24.MoiveClip(動畫片段):MoiveClip相當于一個小的動畫片段,其中包含了多個單獨的幀(圖片),在連續(xù)播放時,就形成了動畫(或小電影片段)的效果。MoiveClip在Flash中經(jīng)常使用,在Egret中也可以進行使用。
25.Egret文本:文本是創(chuàng)建游戲時的必要要素。要了解Egret文本,需要先了解Egret中“DisplayObject(顯示對象)”的概念。
26.Egret顯示對象:“顯示對象”,是可以在舞臺上顯示的對象??梢燥@示的對象,即包括可以直接看見的圖像、文字、視頻、圖片等,也包括不能看見但真實存在的顯示對象容器。
27.文本類型
(1)普通文本:能夠正常的顯示各種文本,文本內(nèi)容可以被程序設(shè)置,是常用的文本類型。
(2)輸入文本:可以被用戶輸入的文本,常用于登陸中的輸入框或者游戲中的聊天窗口。
(3)位圖文本:使用位圖文字來渲染的文本,常用于游戲中需要加特殊字體效果的文本。
28.egret.localStorage.全局函數(shù)。
顯示繼承的公共方法。
(1)clear():void 將所有數(shù)據(jù)清空
(2)getItem(key:string):string 讀取數(shù)據(jù)
(3)removeItem(key:string):void 刪除數(shù)據(jù)
(4)setItem(key:string,value:string):boolean 保存數(shù)據(jù)
29.Egret中的物體主要有兩種:
(1)顯示物體
(2)顯示容器:顯示容器可以理解為“可見顯示物體”的一個載體,顯示容器在場景中是不可見的。
30.顯示物體屬性
(1)alpha:透明度
(2)width:寬度
(3)height:高度
(4)rotation:旋轉(zhuǎn)角度
(5)scaleX:橫向縮放
(6)scaleY:縱向縮放
(7)skewX:橫向斜切
(8)skewY:縱向斜切
(9)visible:是否可見
(10)x:X軸坐標值
(11)y:Y軸坐標值
31.Egret中可以直接使用程序來繪制一些簡單的圖形,這些圖形在運行時都會進行實時繪圖。要進行繪圖操作,我們需要使用Graphics這個類。但并非直接使用。一些顯示對象中已經(jīng)包含了繪圖方法,我們可以直接調(diào)用這些方法來進行繪圖。Graphics中提供的繪圖方法共有四種:a.繪制矩形,b.繪制圓形C.繪制直線D.繪制曲線。
32.在Egret中,我們有三種類型的文本可以選擇,分別為“普通文本”、“輸入文本”和“位圖文本”。這些不同類型的文本在不同的場景中使用。對于不同類型的文本,其操作方式可能會有所不同。三種類型的文本特點如下:
(1)普通文本:能夠正常的顯示各種文本,文本內(nèi)容可以被程序設(shè)置,最為常見的文本類型。
(2)輸入文本:可以被用戶輸入的文本,常用于登陸中的輸入框或者游戲中的聊天窗口。
(3)文圖文本:使用位圖文字來渲染的文本,常用于游戲中需要加特殊字體效果的文本。
33.動畫:
(1)Tween緩存動畫:通常情況下,游戲中或多或少都會帶有一些緩存動畫。例如界面彈出,或者道具飛入飛出的特效等等。在制作這些緩存動畫的時候我們僅僅希望簡單的辦法實現(xiàn)這種移動或者變形縮放的效果。Egret中的Tween緩存動畫類就為我們提供了相關(guān)的功能。
(2)MovieClip序列幀動畫:MovieClip又稱之為“影片剪輯”,是Egret中提供的一種動畫解決方案。我們通常會將MovieClip簡寫為“mc”。實際上一個mc所實現(xiàn)的功能就是播放序列幀動畫。當我們想實現(xiàn)一個任務(wù)跑動的動作時,需要將原有的動畫制成為能夠被Egret識別的動畫格式。然后將這些制作好的資源進行加載,最后播放。
34.Egret中的音頻系統(tǒng)接種HTML5的Audio系統(tǒng),這使得Egret的音頻兼容絕大多數(shù)瀏覽器。在音頻文件格式中Egret僅支持MP3格式。由于音頻文件屬于資源的一部分,所以在游戲邏輯中,使用音頻前需要預先加載音頻資源。
35.Egret顯示對象:(1)直接繼承自DisplayObject的類都屬于非容器。(2)繼承自DisplayObjectContainer的類都屬于容器。
36.打開性能面板:egret.Profiler.getInstance().run();
(1)draw:這個參數(shù)描述了當前畫面渲染時候drawcall的次數(shù)
(2)cost:這里四個參數(shù),EnterFrame階段的開銷,引擎updateTransform開銷,引擎draw開銷,HTML5中canvas.draw的開銷
(3)FPS:當前畫面的幀頻。
37.DisplayObject類是所有顯示對象的父類。
38.Egret中的顯示對象DisplayObject擁有四個派生類,分別為:
(1)Bitmap(2)Shape(3)TextField(4)TextInput
這四個派生類實現(xiàn)了不同的功能:
(1)Bitmap進行位圖顯示和操作。
(2)Shape是可以進行矢量圖繪制的顯示對象。
(3)TextField和TextInput都屬于文本操作。
39.所謂遮罩就是指定一個顯示對象哪些部分可以顯示,哪些部分不可以顯示。Egret啟用遮罩功能非常的簡單,在DisplayObject中,我們暴露了一個名稱為Mask的屬性,該屬性就是用來指定遮罩部分的。
40.自定義顯示對象類需要繼承自DisplayObject的具體子類。
41.每一個顯示對象都包含錨點,該錨點默認位于顯示對象的左上角。當設(shè)置一個顯示對象的坐標位置時,我們會以錨點為參考改變顯示對象繪圖位置。同時,錨點相對于顯示對象的位置也是可以改變的。
42.Egret顯示列表只是針對于Egret的顯示容器物體。
43.Egret中的事件機制是一套業(yè)內(nèi)標準的事件處理架構(gòu)。Egret中,事件模型定義了一套標準的生成和處理事件消息的方法,使程序中的對象可以相互交互,通信,保持自身狀態(tài)和相應(yīng)變化。簡單的說,數(shù)據(jù)的提供者只管發(fā)出數(shù)據(jù)對象,只要確保數(shù)據(jù)對象是egret.Event類或者子類的實例即可。這種數(shù)據(jù)對象,稱為事件(Event)。數(shù)據(jù)對象的發(fā)出者,稱之為事件發(fā)送者(Event dispatcher)。同時,接受事件的對象,稱為事件偵聽者(Event listener)。
44.事件機制包含4個步驟:注冊偵聽器,發(fā)送事件,偵聽事件,移除偵聽器。這四個步驟是按照順序來執(zhí)行的。
45.Event類是所有事件類的基類。當你你要創(chuàng)建一個自定義事件的時候,事件應(yīng)該繼承自Event類。同時Event類也包含一些事件。這些事件通常與顯示列表、顯示對象的狀態(tài)有關(guān)。
46.事件偵聽器也就是事件的處理者,負責接收事件攜帶的消息,并在接收到該事件后執(zhí)行特定的代碼。創(chuàng)建偵聽器,注冊偵聽器與移除偵聽器,檢測偵聽器。
47.事件是可以設(shè)置優(yōu)先級的,這是一個非常方便而且靈活的功能。我們可以通過制定事件的優(yōu)先級來確保那個事件偵聽器會得到提前處理。你可以在注冊偵聽器的時候制定事件的優(yōu)先級。
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");
}
50.Timer類實現(xiàn)計時器的功能
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");
}
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");
}
52.Event類作為創(chuàng)建Event對象的基類,當發(fā)生事件時,Event對象將作為參數(shù)傳遞給事件偵聽器。
private createScene():void {
var eventDispatcher: egret.EventDispatcher = new egret.EventDispatcher();
//注冊和刪除偵聽的時候一定要傳入this,這里和Flash區(qū)別
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();
}
53.TextField是egret的文本渲染類,采用瀏覽器/設(shè)備的API進行渲染,在不同的瀏覽器/設(shè)備中由于字體渲染方式不一,可能會有渲染差異。
54.URLLoader類以文本、二進制數(shù)據(jù)或URL編碼變量的形式從URL下載數(shù)據(jù)。在下載文本文件、XML或其他用于動態(tài)數(shù)據(jù)驅(qū)動應(yīng)用程序的信息時,它很有用。
55.MouseEvent:鼠標事件相關(guān)。由于js的this是動態(tài)地,所以添加和刪除事件的時候,需要傳入this參數(shù)。
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("======");
}
56.egret.全局函數(shù)
顯示繼承的公共方法
(1)callLater(method:Function,thisObject:any,...args):void 延遲函數(shù)到屏幕重繪前執(zhí)行
(2)clearInterval(key:number):void 清除制定延遲后運行的函數(shù)
(3)clearTimeout(key:number):void 清除制定延遲后運行的函數(shù)
(4)getDefinitionByName(name:string):any 返回name參數(shù)制定的類的類對象引用
(5)getOption(key:string):string:獲取瀏覽器或者Runtime參數(shù),如果沒有設(shè)置返回空字符串在瀏覽器中相當于獲取url中參數(shù),在Runtime獲取對應(yīng)setOption參數(shù)。
(6)getQualifiedSuperclassName(value:any):string 返回value參數(shù)制定的對象的基類的完全限定類名
(7)getTimer():number 用于計算相對時間
(8)hasDefinition(name:string):boolean 檢查指定的應(yīng)用程序域之內(nèi)是否存在一個公共定義
(9)is(instance:any,typeName:string):boolean 檢查制定對象是否為Egret框架內(nèi)制定接口或類或其子類的實例
(10)registerClass(classDefinition:any,className:string,interfaceNames:string[]):void 為一個類定義注冊運行時類信息,用此方法往類定義上注冊它自身以及所有接口對應(yīng)的字符串。
(11)setInterval(listener:Function,this,Object:any,delay:number,...args):number 在指定的延遲(以毫秒為單位)間接循環(huán)調(diào)用指定的函數(shù)。
(12)setTimeout(listener:Funtion,thisObject:any,delay:number,...args):number 在指定的延遲(以毫秒為單位)后運行指定的函數(shù)。
(13)startTick(callBack:(timeStamp:number)=>boolean,thisObject:any):void 注冊并啟動一個計時器,通常會以60FPS的速率觸發(fā)回調(diào)方法,并傳入當前時間戳
(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)調(diào)用父類的setter屬性,代替其他語言的寫法,如super.alpha=1;
(17)toColorString(value:number):string轉(zhuǎn)換數(shù)字為顏色字符串