版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
Flash-MMORPG游戲引擎及工具開發(fā)概述
12024/5/7主題:1.游戲核心架構(gòu)設(shè)計(jì)3.輔助應(yīng)用工具2.游戲算法與優(yōu)化22024/5/7WEBGAME核心(引擎)基礎(chǔ)架構(gòu)1.游戲核心架構(gòu)設(shè)計(jì)特性:1.有效地提高開發(fā)效率2.有利于團(tuán)隊(duì)分工開發(fā)3.有利于2次開發(fā)及擴(kuò)展基礎(chǔ)架構(gòu)事件,心跳管理機(jī)制對(duì)象管理機(jī)制通信管理機(jī)制資源管理機(jī)制組成:1.事件心跳機(jī)制(系統(tǒng))解決交互,互動(dòng)等問題2.對(duì)象管理機(jī)制(系統(tǒng))抽象對(duì)象,類架構(gòu)3.資源管理機(jī)制(系統(tǒng))各種資源或配置文件管理4.通信管理機(jī)制(系統(tǒng))解決核心內(nèi)外通信問題核心(引擎)是由多個(gè)系統(tǒng)組成的共同體,每個(gè)系統(tǒng)都負(fù)責(zé)管理自己專屬的職能,系統(tǒng)間協(xié)調(diào)工作最終完成一項(xiàng)或多項(xiàng)功能(效果).32024/5/7職能系統(tǒng)模型----職能管理器特點(diǎn)使用特定的通信協(xié)議,并經(jīng)由唯一的進(jìn)出通道(通信代理)與外界進(jìn)行通信.從屬管理器以單例形式存在,并以特定的命名空間進(jìn)行封裝.基于相同的接口或子接口實(shí)現(xiàn)自身的通信協(xié)議(命令)及對(duì)外訪問方法職能管理代理A從屬管理器[a1]從屬管理器[a2]職能管理代理B從屬管理器[b2]從屬管理器[b2]職能管理代理D從屬管理器[d1]從屬管理器[d2]職能管理代理
C從屬管理器[c1]從屬管理器[c2]1.游戲核心架構(gòu)設(shè)計(jì)定義:職能管理器是由一個(gè)或多個(gè)子管理器(子管理系統(tǒng)組成),及一個(gè)通信代理組成.經(jīng)由代理管理接受請(qǐng)求或回饋信息.42024/5/7事件心跳管理機(jī)制
---------指令管理器事件,心跳管理機(jī)制1.游戲核心架構(gòu)設(shè)計(jì)52024/5/7指令管理器(職能管理器)
----事件,心跳管理中心定義:由心跳指令及事件指令這兩種實(shí)現(xiàn)了IOrder接口的指令來作為通信信息載體,并通過指令管代理進(jìn)行注冊(cè)分流.到其從屬管理器 (心跳管理器,事件管理器)進(jìn)行對(duì)循環(huán)或觸發(fā)類交互的管理中心事件,心跳管理機(jī)制publicinterfaceIOrder
{ functiongetexecHandler():Function; functiongetcallbackHandler():Function; functionsetUp(execHandler:Function,args:Array,callbackHandler:Function)}心跳管理器事件管理器指令通信代理指令管理器組成:1.事件管理器
AS3事件機(jī)制的特征2.心跳管理器
心跳管理的注意事項(xiàng)特點(diǎn):
1.通信載體實(shí)現(xiàn)了共同的接口(Iorder)
2.以回調(diào)機(jī)制取代事件機(jī)制的大部分功能.62024/5/7一.命令管理模式publicinterfaceIOrder{ function
setid(value:int):void; functiongetid():int functionexecHandler():Object; functioncallbackHandler(args:Array):Object; functionsetUp(execHandler:Function,args:Array,callbackHandler:Function);}事件,心跳管理機(jī)制創(chuàng)建指令創(chuàng)建一個(gè)心跳指令/事件指令注冊(cè)指令經(jīng)由指令管理器的唯一入口根據(jù)指令的類型對(duì)指令進(jìn)行注冊(cè)分流執(zhí)行指令指令分流后到達(dá)心跳管理器或事件管理器后進(jìn)行相應(yīng)的操作回調(diào)根據(jù)注冊(cè)的指令的相關(guān)定義或執(zhí)行回調(diào)操作指令模式與as3的事件機(jī)制的優(yōu)勢(shì)與區(qū)別:1.事件機(jī)制傳遞一個(gè)事件,需要放到事件流當(dāng)中.要一層接一層的封裝事件.然后通過實(shí)現(xiàn)了IEventDispatcher接口的對(duì)象將一個(gè)事件派發(fā)出去.
這個(gè)過程可能創(chuàng)建的實(shí)例很多.而且因?yàn)橐膊宓绞录鳟?dāng)中進(jìn)行冒泡遍歷.當(dāng)注冊(cè)的事件越多消耗越大.2.指令模式則是以預(yù)先封裝好的方法及回調(diào)方式組裝成一個(gè)指令原型,通信過程不需理會(huì)嵌套的層級(jí)數(shù),直接對(duì)應(yīng)用對(duì)原型的方法進(jìn)行回調(diào),而且指令原型實(shí)例只有相關(guān)的2個(gè)方法沒有其他相關(guān)屬性.不像事件機(jī)制需要整個(gè)對(duì)象進(jìn)行引用,再加上生命周期結(jié)束后便可方便御載,銷毀.72024/5/7二.事件及心跳管理機(jī)制
AS3的事件機(jī)制(事件流三個(gè)階段)Target.addEventListener(EventType.EVENT_NAME,eventResponse)
捕獲階段該階段包括從舞臺(tái)到目,標(biāo)節(jié)點(diǎn)的父節(jié)點(diǎn)范圍內(nèi)的所有點(diǎn)。
目標(biāo)階段:該階段僅包括目標(biāo)節(jié)點(diǎn).
冒泡階段:冒泡階段包括從目標(biāo)節(jié)點(diǎn)的父節(jié)點(diǎn)返回到舞臺(tái)的行程中遇到的節(jié)點(diǎn)事件,心跳管理機(jī)制對(duì)象回收注意:1.保證該對(duì)象沒有存在引用關(guān)系
(實(shí)例屬性的要保證為null)2.隨意注冊(cè)事件偵聽(弱引用).3.對(duì)象的任意引用事件管理器:對(duì)核心的所有交互對(duì)象的事件偵聽進(jìn)行強(qiáng)制注冊(cè),收集管理,并實(shí)現(xiàn)統(tǒng)一的注冊(cè),銷毀等接口82024/5/7心跳管理器:事件,心跳管理機(jī)制心跳:以一定的時(shí)間間隔為標(biāo)注,間隔時(shí)間內(nèi)調(diào)度一次的事件模式.目的:更好更合理的對(duì)需要進(jìn)行心跳的對(duì)象進(jìn)行統(tǒng)一管理,且節(jié)省不必要的性能浪費(fèi).途徑:DisplayObject.ENTER_FRAME:
特征:動(dòng)作的執(zhí)行以幀頻為頻率.每次執(zhí)行必須最大程度保證當(dāng)前幀的邏輯及渲染已經(jīng)完成.(根據(jù)執(zhí)行的情況可能會(huì)出現(xiàn)丟幀顯現(xiàn))適合于偏向渲染的心跳處理.如組件,可視對(duì)象涉及渲染的屬性修改.等Timer
特征:能自定義制定的時(shí)間間隔進(jìn)行心跳處理而不依賴于幀頻,但幀頻的執(zhí)行對(duì)其也有一定影響.執(zhí)行的間隔的準(zhǔn)確度跟當(dāng)然cpu消耗有直接關(guān)系.適用于偏向邏輯型運(yùn)算的心跳處理setInterval
是一個(gè)封裝好的Timer管理器.但沒有實(shí)現(xiàn)群組,隊(duì)列等功能的Timer的工廠模式實(shí)現(xiàn).于as2時(shí)的區(qū)別主要在于as2時(shí)setInterval只要事件間隔到,就會(huì)馬上執(zhí)行下一輪代碼塊,而不管之前的代碼塊是否已經(jīng)執(zhí)行完畢.
setTimeout能在執(zhí)行完制定次數(shù)后自動(dòng)銷毀的計(jì)數(shù)器,是基于setInterval的一個(gè)實(shí)現(xiàn)擴(kuò)展.功能要求:能實(shí)現(xiàn)動(dòng)態(tài)創(chuàng)建timer并對(duì)相應(yīng)注冊(cè)的指令進(jìn)行操作.對(duì)于相同心跳的指令進(jìn)行群組共同注冊(cè)到統(tǒng)一timer心跳下以減少timer數(shù)目增多導(dǎo)致的性能下降.能進(jìn)行增,刪,改,查,銷毀等操作.根據(jù)實(shí)際需求還可以實(shí)現(xiàn)對(duì)同一對(duì)象下所有心跳頻率的統(tǒng)一停止開始,銷毀等功能.該部分功能特別適用對(duì)于管理場(chǎng)景下不同角色或怪物的速度,邏輯等92024/5/7packageflash.utils{importflash.events.*;finalclassSetIntervalTimerextendsTimer{varid:uint;privatevarrest:Array;privatevarclosure:Function;privatestaticvarintervals:Array=[];functionSetIntervalTimer(closure:Function,delay:Number,repeats:Boolean,rest:Array){super(delay,repeats?(0):(1));this.closure=closure;this.rest=rest;addEventListener(TimerEvent.TIMER,this.onTimer);start();this.id=intervals.length+1;intervals.push(this);return;}//endfunctionprivatefunctiononTimer(event:Event):void{this.closure.apply(null,this.rest);if(repeatCount==1){if(intervals[(this.id-1)]==this){deleteintervals[(this.id-1)];}}return;}//endfunctionstaticfunctionclearInterval(id_to_clear:uint):void{id_to_clear=id_to_clear-1;if(intervals[id_to_clear]is){intervals[id_to_clear].stop();deleteintervals[id_to_clear];}return;}//endfunction}}破解playerglobal.swc的SetIntervalTimer部分實(shí)現(xiàn)的代碼事件,心跳管理機(jī)制心跳管理器:基于與事件管理器相同統(tǒng)一的管理接口對(duì)核心的所有交互對(duì)象的循環(huán)間隔調(diào)用進(jìn)行集中優(yōu)化管理.注意:1.timer實(shí)例越少越好,相同間隔的軌到統(tǒng)一timer管理.2.相同倍數(shù)的間隔timer,改用最小公倍數(shù)為間隔.3.邏輯型心跳適用Timer實(shí)現(xiàn),重繪型適宜用EnterFrame4.實(shí)現(xiàn)對(duì)象實(shí)例的所有心跳命令的統(tǒng)一分組,回收或暫停102024/5/7通信管理機(jī)制
-------模塊及系統(tǒng)間的通信1.游戲核心架構(gòu)設(shè)計(jì)通信管理機(jī)制112024/5/7信件指令
-----擴(kuò)展命令模式的通信載體Message=Head+Body通信管理機(jī)制.系統(tǒng)通信管理
1.全局?jǐn)?shù)據(jù)的存儲(chǔ),查詢
2.配置數(shù)據(jù)及常量的管理
3.統(tǒng)一接口形式訪問管理.模塊通信管理:對(duì)所有模塊都將注冊(cè)其中并對(duì)其進(jìn)行管理,模塊通過接口方法send將信息發(fā)送模塊管理器,并由模塊管理器發(fā)送信件對(duì)內(nèi)通信:
(核心內(nèi))系統(tǒng)間通信系統(tǒng)內(nèi)部通信對(duì)外通信:
(核心外或2次開發(fā))
1.模塊間通信
2.模塊內(nèi)部通信
3.與服務(wù)端等外部程序間的通信通信管理與模塊作為游戲核心的一個(gè)重要系統(tǒng)機(jī)制的同時(shí)也是溝通不同系統(tǒng)的的橋梁一個(gè)Message(信件)應(yīng)由兩部分組成即Head(信件頭,標(biāo)記信件的通信類型,發(fā)信人,收信人等基本信息的載體)及Body(信件主體,通信的行為邏輯,及回調(diào)等具體方式的Iorder接口的實(shí)現(xiàn))分類:通信管理:122024/5/7MODULE—模塊模塊間通信(ModuleToModule)模塊與服務(wù)端通信(ModuleToSevice)模塊內(nèi)部的通信(SubModule--訂閱式通信)模塊化開發(fā)通信管理機(jī)制說明:
核心(引擎)開發(fā)的模塊部分主要是為了解決核心外或2次開發(fā)時(shí)不同功能組成的協(xié)調(diào)工作,而提供一種模板式開發(fā)方式.并且封裝及提供統(tǒng)一的通信模式模塊-Moudle
(MVC)publicinterfaceIModule{functiongetview():IBaseSpritefunctionsetview(value:IBaseSprite):voidfunctionregister(moduleName:String):voidfunctionsend(message:IMessage):voidfunction
getproxy():IProxy}132024/5/7通信管理機(jī)制1.登錄2.角色(裝備切換)3.導(dǎo)航/技能快捷欄,(鍵盤操控管理,拖拉管;理)4.地圖(bitmapdata
矩陣處理)5.好友(圖文混排,html文本,tree數(shù)據(jù)結(jié)構(gòu))6.消息(系統(tǒng)消息,私聊信息,集群信息)7.商店(ui組件設(shè)計(jì))8任務(wù)
(ui組件設(shè)計(jì))9.類型:主線,支線,循環(huán),活動(dòng),常規(guī)10.內(nèi)容:對(duì)話,打怪,收集,押送,探險(xiǎn),特殊11.組隊(duì)(跟隨,同步)12.寵物(跟隨,同步)13.坐騎14.法寶15.幫會(huì)16.國家17.掛機(jī)模塊化開發(fā)模塊分類:特點(diǎn):1.相似度高(一般繼承核心的基礎(chǔ)模板,不同模塊開發(fā)者可以相互開發(fā))2.高效(結(jié)構(gòu)清晰,不需要費(fèi)太多心思去想怎么獨(dú)立實(shí)現(xiàn),不清楚還可以借鑒其他模塊)3.基于核心提供的通信機(jī)制(模塊開發(fā)者可以不需要理會(huì)核心的具體實(shí)現(xiàn),并且可以基于核心提供的通信機(jī)制完成所有通信類問題)4.模塊通信的message結(jié)構(gòu)決定了能夠?qū)⒁粋€(gè)封裝好的動(dòng)作指令傳遞到其他模塊其他模塊在接受到信息后可以不需要重新組織而直接調(diào)用相關(guān)指令方法142024/5/7解決模塊內(nèi)部的通信問題
--------SubModule(訂閱模塊)模塊一般是一個(gè)mvc結(jié)構(gòu)
這也意味著一個(gè)模塊將會(huì)有多個(gè)界面組成,但功能模塊的唯一性.
由此而導(dǎo)致的問題是 1.怎么在模塊的某些子界面里調(diào)用模塊的通信接口進(jìn)行通信 2.模塊在接受到別的模塊發(fā)送的信息時(shí)如果要求該模塊下某個(gè)組成部分進(jìn)行操作時(shí),怎么進(jìn)行通知.SubModule的創(chuàng)建就是為了解決,這兩個(gè)實(shí)際開發(fā)中經(jīng)常遇到的問題而產(chǎn)生的.它的工作原理如下.
這里邊我的解決方案是采用訂閱的方式,通過模塊管理器對(duì)模塊進(jìn)行訂閱式處理.將一個(gè)SubModule掛鉤到一個(gè)模塊后,SubModule會(huì)通過模塊管理器將其注冊(cè)到該模塊下,并在接受信息的接口方法里遍歷其所有注冊(cè)的SubModule(訂閱模塊)進(jìn)行信件廣播.而SubModule(訂閱模塊也可以自身的注冊(cè)信息通過模塊管理器查找到該所屬的模塊并調(diào)用該模塊的方法進(jìn)行信件發(fā)送)等操作.不需要使用時(shí)只要在該模塊移除該訂閱模塊即可.通信管理機(jī)制152024/5/7對(duì)象管理機(jī)制對(duì)象管理機(jī)制1.游戲核心架構(gòu)設(shè)計(jì)162024/5/7WEBGAME可視對(duì)象結(jié)構(gòu):對(duì)象管理機(jī)制可視基類游戲場(chǎng)景可視對(duì)象位圖序列可視對(duì)象效果類或非交互性物品交互性物品(4叉樹優(yōu)化)角色寵物Npc其他加載器2進(jìn)制加載對(duì)象SWF加載器圖片加載器其他組件模塊可視對(duì)象控件布局導(dǎo)航器172024/5/7游戲中的可視化對(duì)象管理基于統(tǒng)一基類:IBaseSprite1.實(shí)現(xiàn)可視對(duì)象的事件行為,心跳行為的統(tǒng)一注冊(cè)管理等.2.所有信息存放于實(shí)現(xiàn)統(tǒng)一接口的信息體(IBaseVo)中,用于實(shí)現(xiàn)數(shù)據(jù)與界面分離.3.能實(shí)現(xiàn)實(shí)例進(jìn)行的獨(dú)立完整御載及銷毀.圖形化管理.1.webgame一般盡量使用位圖序列作為呈現(xiàn)對(duì)象,具體根據(jù)項(xiàng)目要求.2.靈活使用catchAsBitmap(當(dāng)可視對(duì)象渲染頻率較少時(shí),或只移動(dòng)時(shí),MovieClip類時(shí)間軸對(duì)象對(duì)幀畫面進(jìn)行獨(dú)立catch而不要對(duì)整個(gè)進(jìn)行catch)3.矢量對(duì)象素材能減少加載的內(nèi)存消耗,但增加cpu負(fù)擔(dān)(一般做法是加載時(shí)用矢量,運(yùn)行后使用catchAsBitmap轉(zhuǎn)換為位圖)Ui組件庫1.創(chuàng)建自己的輕量級(jí)組件庫2.Fl組件包第三方組件庫AsWing,Flex
Spark組件框架對(duì)象管理機(jī)制182024/5/7鼠標(biāo)事件的替代方案--動(dòng)態(tài)4叉樹的應(yīng)用1.解決點(diǎn)擊事件中因?qū)ο笊现仙疃鹊目梢晫?duì)象的存在而阻礙事件的觸發(fā).2.實(shí)現(xiàn)高效制定范圍的對(duì)象搜索3.減少深度排序的對(duì)象列表數(shù)4.用于怪物的簡單ai搜索行為5.用戶動(dòng)態(tài)繞行阻礙.減少cpu的消耗及內(nèi)存的使用1.對(duì)于非交互類可視對(duì)象禁用mouseEnabled及mouseChildren2.addChild(),addChildAt()等方法消耗巨大(排序類操作最好驗(yàn)證判斷后使用)3.盡量少用濾鏡(消耗較大,創(chuàng)建了兩份內(nèi)存)4.避免大消耗方法使用
如:Array.push()<
Ayray.unshift()<Array.splice()Array.pop()<ArrArray.shift()<Array.splice()
(數(shù)據(jù)添加后排序)5.少用Alpha與混合模式6.盡量public替代seter()與geter(),消耗相當(dāng)于方法的調(diào)用7.盡量使用函數(shù)嵌套.8.實(shí)例數(shù)越少越好,腳本越多效率越差(虛擬機(jī)的反射遍歷)游戲中的對(duì)象優(yōu)化192024/5/7資源管理機(jī)制資源管理1.游戲核心架構(gòu)設(shè)計(jì)202024/5/7資源管理機(jī)制統(tǒng)一的資源加載,能對(duì)加載的資源進(jìn)行隊(duì)列,優(yōu)先級(jí)別加載實(shí)現(xiàn)素材的共享,最大限度的減少內(nèi)存的開銷.能對(duì)不同資源進(jìn)行分類加載管理解釋;能攜帶相關(guān)加載信息.加載器跟提取器分離,資源加載請(qǐng)求加載完畢后要對(duì)加載器的請(qǐng)求進(jìn)行銷毀回收.防止因?yàn)閼?yīng)用鏈狀關(guān)系復(fù)雜而導(dǎo)致實(shí)際操作中對(duì)象的回收失敗.212024/5/7資源管理流程:Target請(qǐng)求資源vo資源vo資源vo優(yōu)先資源組資源vo資源vo資源vo隊(duì)列資源組圖片資源Image_Loader圖片加載器SWF資源SWf_LoaderSWF加載器2進(jìn)制資源Bing_Loader2進(jìn)制文件加載器資源加載隊(duì)列分類加載銷毀請(qǐng)求資源池Image_Loader圖片資源Image_Loader圖片資源資源池Bing_Loader2進(jìn)制資源Bing_Loader2進(jìn)制資源資源池Swf_LoaderSWF資源Swf_LoaderSWF資源派發(fā)加載事件資源提取管理等222024/5/7OTHER--算法及輔助工具3.輔助應(yīng)用工具2.游戲算法與優(yōu)化232024/5/7242024/5/7用途:1.指定范圍內(nèi)搜索對(duì)象2.替代點(diǎn)擊事件3.實(shí)現(xiàn)簡單的AI;4.優(yōu)化排序,A*等高消耗算法的遍歷對(duì)象數(shù)目……….缺點(diǎn):需要在初始化時(shí)進(jìn)行一次建樹;面積越大耗時(shí)越久,注意:不是每個(gè)對(duì)象更改了就遍歷一次樹,每次遍歷的消耗是巨大的.只需對(duì)象位置變化時(shí)修改對(duì)應(yīng)的節(jié)點(diǎn)即可四叉樹作為一種數(shù)據(jù)結(jié)構(gòu),同樣廣泛應(yīng)用于游戲中,(3d游戲)以預(yù)先或動(dòng)態(tài)建樹的方式達(dá)到快速遍歷次,減速遍歷次數(shù)等數(shù)據(jù)查詢工作.252024/5/7原理rectWidth=Width/(4^(n-1))rectHeight=Height/(4^(n-1))W_1=100001W_2=10000/4=2500Sn=42W_3=10000/4*4=10000/16=625Sn=203W_5=10000/4*4*4=10000/64=156.25Sn=844W_6=10000/4*4*4*4=10000/256=39.0625sn=3405W_6=10000/1024=9.765625sn=13646W_6=10000/4096=2.44140625Sn=64607W_7=10000/16384=0.6103515625sn=2184410000像素高寬,逸代6次總節(jié)點(diǎn)個(gè)數(shù):4+16+256+1024+4096=(4-4096*4)/(1-4)=646014*1=44*4=164*4*4=32….4^n效率影響因素:精度及深度精度:最底層矩形的大小深度:逸代的次數(shù)公式:逸代過程中:矩形大小變化與建樹節(jié)點(diǎn)數(shù)目的關(guān)系::每次逸代的節(jié)點(diǎn)個(gè)數(shù)為:(4^)262024/5/745度深度排序
【Function:getOnlyDepthFunc(target:DisplayObject,source:Array):Object】target--物品列表中的某一物品。source--物品列表(包含target)這個(gè)條件方法的最終結(jié)果是要返回當(dāng)前某一物品在一個(gè)物品列表中的唯一確定深度【itemDepth】以及除去了target的剩余物品列表【residualSource】。(可以不需考慮其他物品的深度變化,因?yàn)檫@里只關(guān)心target的深度,而事實(shí)上因?yàn)槊看未_定一個(gè)物品的深度時(shí)都有可能導(dǎo)致剩余物品的深度變化所以也是不需要考慮其他物品深度變化的)好,先不要問這個(gè)方法怎么實(shí)現(xiàn),具體實(shí)現(xiàn)下邊會(huì)提到。下邊說說我的這個(gè)算法的設(shè)想假如現(xiàn)在有一個(gè)長度為n的物品列表【sourceN:Array】,因?yàn)榧僭O(shè)的已知條件方法【getOnlyDepthFunc】可以返回某一物品在物品列表中的確定深度,我們是否可以通過逸代這個(gè)【getOnlyDepthFunc】方法并且參數(shù)target以每次執(zhí)行完后得到的剩余物品列表【residualSource】的某一個(gè)物品,source則以每次執(zhí)行完后得到的剩余物品列表【residualSource】去賦值,并且把每次得到的在該片段物品列表中target的唯一確定深度【itemDepth】儲(chǔ)存并整理還原為原物品列表【sourceN:Array】所對(duì)應(yīng)的物品深度,那么我們就應(yīng)該可以得到最總我們想要的深度已經(jīng)排好序的物品新數(shù)組了。上邊就是我的設(shè)想,這里為了方便大家理解,這里再點(diǎn)一下要注意的一些地方。方法【getOnlyDepthFunc】返回的深度只是參數(shù)source列表里的確定深度,但由于每次逸代的剩余物品列表【residualSource】是總物品列表【sourceN】的剩余片段列表,所以他們存在一個(gè)耦合性。處理上我是這么做的,在排序我前先聲明一個(gè)跟【sourceN】一樣長度的空數(shù)組【rebackSource】;然后從第一次開始,以第一次得到的深度為索引,將索引對(duì)應(yīng)的物品賦值給【rebackSource】數(shù)組對(duì)應(yīng)的位上。然后逸代下一次。因?yàn)榈?次開始已經(jīng)是剩余物品列表。所以得出的深度【itemDepth】只是相對(duì)于每次返回的剩余物品列表【residualSource】的對(duì)應(yīng)唯一深度。但正因?yàn)槭鞘S辔锲妨斜恚晕覀兛梢酝ㄟ^從開始項(xiàng)到得到的深度索引【itemDepth】項(xiàng),不為undefiend的項(xiàng)數(shù),來得到在總列表中的位置。也就是【residualSource】列表的具體項(xiàng)。然后把這次的target賦值給該位置。逸代一共執(zhí)行品列表【sourceN:Array】長度次。不用考慮效率,因?yàn)槊看味际鞘S嗔斜淼拈L度都在減少,而且不用排序,是一個(gè)高效的嵌套循環(huán)。272024/5/7T-RC-RT-LC-LB-LT-CB-CC-C[B-L][B-C][B-R][C-L][C-C]
[C-R][T-L][T-C][T-R]01
2
3
4
5
6
7
8公式:item.sideR=(target.[B].y-item.[L].y)item.sideL=(item.[B].y-target.[L].y)item.sideB=(target.[T].x-item.minZ.[L].x)item.sideT=(item.[T].x-target.[L].x)當(dāng)item.sideR<0時(shí),item于target的右邊;當(dāng)i
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度城管視頻拍攝與智慧城市建設(shè)合同4篇
- 2025年度出納人員職業(yè)擔(dān)保合同示范文本3篇
- 二零二五版馬鈴薯種薯選育與良種推廣合同4篇
- 二零二五年度鋼結(jié)構(gòu)建筑項(xiàng)目抗震性能評(píng)估合同范本3篇
- 二零二五年度垃圾分類設(shè)施設(shè)備承包合同4篇
- 二零二五版特色商業(yè)街區(qū)租賃合同范本4篇
- 2025年度農(nóng)產(chǎn)品直銷市場(chǎng)代理合作協(xié)議書4篇
- 二零二五年度地質(zhì)勘探打井與樣品采集合同4篇
- 二零二五年度創(chuàng)業(yè)擔(dān)保貸款信用修復(fù)合作協(xié)議4篇
- 個(gè)體采購專用協(xié)議模板2024版
- GB/T 11072-1989銻化銦多晶、單晶及切割片
- GB 15831-2006鋼管腳手架扣件
- 有機(jī)化學(xué)機(jī)理題(福山)
- 醫(yī)學(xué)會(huì)自律規(guī)范
- 商務(wù)溝通第二版第4章書面溝通
- 950項(xiàng)機(jī)電安裝施工工藝標(biāo)準(zhǔn)合集(含管線套管、支吊架、風(fēng)口安裝)
- 微生物學(xué)與免疫學(xué)-11免疫分子課件
- 《動(dòng)物遺傳育種學(xué)》動(dòng)物醫(yī)學(xué)全套教學(xué)課件
- 弱電工程自檢報(bào)告
- 民法案例分析教程(第五版)完整版課件全套ppt教學(xué)教程最全電子教案
- 7.6用銳角三角函數(shù)解決問題 (2)
評(píng)論
0/150
提交評(píng)論