1.紋理集實際上就是將一些零碎的小圖放到一張大圖當中。游戲中也經(jīng)常使用到紋理集刊棕。使用紋理集的好處很多炭晒,我們通過將大量的圖片拼合為一張圖片從而減少網(wǎng)絡請求,原先加載數(shù)次的圖片資源現(xiàn)在加載一次即可甥角。同時网严,在引擎渲染的時候也會減少IO讀取,從而提高性能嗤无。
2.只要發(fā)生事件震束,F(xiàn)lash就會調度事件對象怜庸。如果事件目標不在顯示列表中,則Flash Player或AIR將事件對象直接調度到事件目標垢村。例如割疾,F(xiàn)lash Player將process事件對象直接調度到URLStream對象。但是嘉栓,如果事件目標在顯示列表中宏榕,則FlashPlayer將事件對象調度到顯示列表,事件對象將在顯示列表中穿行侵佃,直到到達事件目標麻昼。
3.TypeScript基本數(shù)據(jù)類型:Boolean,Number馋辈,String抚芦,Array,Enum迈螟,Any叉抡,Void。
4.Egret GUI系統(tǒng)的特性:
(1).皮膚分離機制:皮膚分離機制就是把GUI控件的外觀與邏輯處理分離開來答毫∪烀瘢控件的邏輯代碼只負責動態(tài)的邏輯處理,如事件監(jiān)聽和數(shù)據(jù)刷新洗搂。而皮膚部件只負責控件的外觀轴捎,如實例化子項,設置控件的樣式和布局等靜態(tài)的屬性蚕脏。
(2).失效驗證機制
(3).自適應流式布局
5.Egret中的事件機制:事件發(fā)送者.addEventListener(事件類型,偵聽器侦锯,this)驼鞭;
6.Egret命令行介紹
(1)build:構建制定項目,編譯制定項目的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個顯示相關的核心類亲桥,一個接口洛心,具體繼承結構如下:
(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:旋轉角度
(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()方法將坐標從全局(舞臺)坐標轉換為本地(顯示對象容器)坐標溯街。同樣也可以使用DisplayObject類的localToGlobal()方法將本地坐標轉換為舞臺坐標诱桂。
12.通過觸摸來移動顯示對象,當手指按到屏幕時監(jiān)聽TOUCH_MOVE事件呈昔,然后每次手指移動時都會調用此函數(shù)挥等,使拖到的對象跳到手指所在的x,y坐標韩肝。當手指離開屏幕后取消監(jiān)聽触菜,對象停止跟隨。
13.如果顯示對象太大哀峻,不能在要顯示它的區(qū)域中完全顯示出來涡相,則可以使用scrollRect屬性定義顯示對象的可查看區(qū)域。此外剩蟀,通過更改scrollRect屬性催蝗,可以使內容左右平移或上下移動。
14.被緩存的對象依然可以更新它內部的對象育特,這時將自動重新創(chuàng)建緩存丙号。將顯示對象的cacheAsBitmap屬性設置為true就會把顯示對象緩存成位圖形式。DisplayObject類的scrollRect屬性與使用cacheAsBitmap屬性的位圖緩存有關缰冤。只有將cacheAsBitmap設置為true時犬缨,才能看到scrollRect屬性帶來的性能優(yōu)勢。
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對象用于創(chuàng)建MovieClip涩搓。
(4)egret.MovieClipEvent:當動畫的當前偵有事件,將調度MovieClipEvent對象。幀事件類型MovieClipEvent.FRAME_LABEL.
(5)egret.ScrollView:ScrollView是用于滑動的輔助類急前,將一個顯示對象傳入構造函數(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ā)送到服務器時,URLRequest對象應使用POST方法還是GET方法
(11)egret.URLVariables:使用URLVariable類可以在應用程序和服務器之間傳輸變量爷恳。
(12)egret.MainContext:是游戲的核心平臺接口
18.Egret v2.5.0Tween擴展庫API
(1)egret.Ease:緩存函數(shù)集合,使用不同的緩存函數(shù)使得動畫按照對應的方程進行象踊。
(2)egret.Tween:Tween是Egret的動畫緩存類
19.粒子系統(tǒng)的主要類職責:
(1)particle:粒子類温亲,定義了粒子的基礎參數(shù),如:xy坐標杯矩、旋轉栈虚、縮放等。
(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提供的岸啡,結合外部配置文件的資源管理和加載方式。__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)普通文本:能夠正常的顯示各種文本丧裁,文本內容可以被程序設置二庵,是常用的文本類型。
(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:旋轉角度
(5)scaleX:橫向縮放
(6)scaleY:縱向縮放
(7)skewX:橫向斜切
(8)skewY:縱向斜切
(9)visible:是否可見
(10)x:X軸坐標值
(11)y:Y軸坐標值
31.Egret中可以直接使用程序來繪制一些簡單的圖形,這些圖形在運行時都會進行實時繪圖炬称。要進行繪圖操作汁果,我們需要使用Graphics這個類。但并非直接使用玲躯。一些顯示對象中已經(jīng)包含了繪圖方法据德,我們可以直接調用這些方法來進行繪圖鳄乏。Graphics中提供的繪圖方法共有四種:a.繪制矩形,b.繪制圓形C.繪制直線D.繪制曲線棘利。
32.在Egret中橱野,我們有三種類型的文本可以選擇,分別為“普通文本”善玫、“輸入文本”和“位圖文本”水援。這些不同類型的文本在不同的場景中使用。對于不同類型的文本茅郎,其操作方式可能會有所不同蜗元。三種類型的文本特點如下:
(1)普通文本:能夠正常的顯示各種文本,文本內容可以被程序設置系冗,最為常見的文本類型奕扣。
(2)輸入文本:可以被用戶輸入的文本,常用于登陸中的輸入框或者游戲中的聊天窗口毕谴。
(3)文圖文本:使用位圖文字來渲染的文本成畦,常用于游戲中需要加特殊字體效果的文本。
33.動畫:
(1)Tween緩存動畫:通常情況下涝开,游戲中或多或少都會帶有一些緩存動畫循帐。例如界面彈出,或者道具飛入飛出的特效等等舀武。在制作這些緩存動畫的時候我們僅僅希望簡單的辦法實現(xiàn)這種移動或者變形縮放的效果拄养。Egret中的Tween緩存動畫類就為我們提供了相關的功能。
(2)MovieClip序列幀動畫:MovieClip又稱之為“影片剪輯”银舱,是Egret中提供的一種動畫解決方案瘪匿。我們通常會將MovieClip簡寫為“mc”。實際上一個mc所實現(xiàn)的功能就是播放序列幀動畫寻馏。當我們想實現(xiàn)一個任務跑動的動作時棋弥,需要將原有的動畫制成為能夠被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.每一個顯示對象都包含錨點县昂,該錨點默認位于顯示對象的左上角肮柜。當設置一個顯示對象的坐標位置時,我們會以錨點為參考改變顯示對象繪圖位置倒彰。同時审洞,錨點相對于顯示對象的位置也是可以改變的。
42.Egret顯示列表只是針對于Egret的顯示容器物體待讳。
43.Egret中的事件機制是一套業(yè)內標準的事件處理架構芒澜。Egret中,事件模型定義了一套標準的生成和處理事件消息的方法创淡,使程序中的對象可以相互交互痴晦,通信,保持自身狀態(tài)和相應變化琳彩。簡單的說誊酌,數(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)建一個自定義事件的時候闸与,事件應該繼承自Event類。同時Event類也包含一些事件岸售。這些事件通常與顯示列表践樱、顯示對象的狀態(tài)有關。
46.事件偵聽器也就是事件的處理者凸丸,負責接收事件攜帶的消息拷邢,并在接收到該事件后執(zhí)行特定的代碼。創(chuàng)建偵聽器屎慢,注冊偵聽器與移除偵聽器瞭稼,檢測偵聽器。
47.事件是可以設置優(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的文本渲染類,采用瀏覽器/設備的API進行渲染泊愧,在不同的瀏覽器/設備中由于字體渲染方式不一伊磺,可能會有渲染差異。
54.URLLoader類以文本删咱、二進制數(shù)據(jù)或URL編碼變量的形式從URL下載數(shù)據(jù)屑埋。在下載文本文件、XML或其他用于動態(tài)數(shù)據(jù)驅動應用程序的信息時痰滋,它很有用摘能。
55.MouseEvent:鼠標事件相關。由于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ù)聪富,如果沒有設置返回空字符串在瀏覽器中相當于獲取url中參數(shù),在Runtime獲取對應setOption參數(shù)著蟹。
(6)getQualifiedSuperclassName(value:any):string 返回value參數(shù)制定的對象的基類的完全限定類名
(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 在指定的延遲(以毫秒為單位)間接循環(huán)調用指定的函數(shù)萧豆。
(12)setTimeout(listener:Funtion奸披,thisObject:any,delay:number涮雷,...args):number 在指定的延遲(以毫秒為單位)后運行指定的函數(shù)阵面。
(13)startTick(callBack:(timeStamp:number)=>boolean,thisObject:any):void 注冊并啟動一個計時器,通常會以60FPS的速率觸發(fā)回調方法洪鸭,并傳入當前時間戳
(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轉換數(shù)字為顏色字符串