



版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、Indexer系統(tǒng)全面教程1. Indexer系統(tǒng)有什么用?做技能時 ,往往需要給單位綁定一些數(shù)據(jù) ,比如做護(hù)盾類技能時需要綁定護(hù)盾能抵消的傷害值 ,做一些持續(xù)傷害的技能時需要給技能目標(biāo)單位綁定傷害來源單位和每秒的傷害值 .目前常用的方法有全局變量、緩存和哈希表三種。全局變量有高效、方便使用的有點(diǎn),只需要設(shè)置變量=xx 即可;缺點(diǎn)則是無法支持多人。市面上大多數(shù)支持多人的做法是采用全局變量數(shù)組,用玩家索引做數(shù)組索引。在控制單英雄的地圖中可以起到很好的效果,但是對于需要支持更多單位、或者每個玩家多個單位的時候,就顯得不夠用。緩存和哈希表分別對應(yīng)1.20 版本和 1.24 版本的魔獸。緩存需要使用r
2、eturn bug ,需要使用 jass 或自定義代碼來存儲數(shù)據(jù);哈希表提供了GetHandleId 函數(shù),但是在觸發(fā)器中沒有合適的接口,最后還是需要通過自定義代碼或第三方we (比如 ydwe )提供的功能來使用,比較復(fù)雜。使用 Indexer 系統(tǒng)可以方便的記錄很多數(shù)據(jù),而且通過擴(kuò)展,該系統(tǒng)可以支持位移系統(tǒng)等更多的功能。2. Indexer系統(tǒng)的原理Indexer系統(tǒng)是基于全局變量數(shù)組的記錄方式。觸發(fā)中有設(shè)置單位自定義值的功能,自定義值可以是任意整數(shù),而且可以綁定單位而沒有其他副作用。Indexer 系統(tǒng)通過一定的算法,使得每個單位都擁有不同的自定義值。這樣,類似于利用玩家索引制作支持多人
3、的技能,可以將單位的自定義值作為數(shù)組索引來使得觸發(fā)支持多人,可以支持任意玩家的任意多個單位(理論上只能支持 8191 個單位,但絕大多數(shù)地圖上不會同時存在如此多的單位)。Indexer 系統(tǒng)在地圖初始化時選取全地圖的單位來設(shè)置不同的自定義值。之后通過單位進(jìn)入可用地圖區(qū)域來獲取系統(tǒng)中新增的單位。由于單位進(jìn)入可用地圖區(qū)域事件有延時,所以需要新建的單位立刻進(jìn)入系統(tǒng)時(比如彈幕、馬甲持續(xù)攻擊芙蓉面還),還需要一個新增單位的觸發(fā)。當(dāng)單位死亡時,判斷是否為英雄單位。如果不是英雄,則可以移出 Indexer 系統(tǒng)。3. 簡單的 Indexer系統(tǒng)制作一個最簡單的Indexer 系統(tǒng)需要以下變量:其中, Fl
4、ag 表示當(dāng)前 Indexer 中最大的自定義值。Group 將進(jìn)入 Indexer 系統(tǒng)的單位放入單位組,避免單位重復(fù)進(jìn)入(創(chuàng)建單位手動添加的情況下)。 Unit 數(shù)組將單位按自定義值作為索引添加到單位組,這樣就可以通過單位自定義值來獲取對應(yīng)單位。 LocalIndex 是個臨時整數(shù),用來記錄當(dāng)前單位的自定義值。觸發(fā)如下:將初始化地圖中的單位添加到Indexer 系統(tǒng)中。這里利用數(shù)組的0 號索引作為臨時的變量,不作為實(shí)際存儲使用。獲取當(dāng)前單位后(這里是單位組循環(huán)中的選取單位),將 Flag 的值 +1 ,并作為單位的自定義值,即可保證每個單位的自定義值不同。該觸發(fā)最后一行是給下一個觸發(fā)添加事
5、件。下一個觸發(fā)里直接設(shè)置事件也可以。游戲中動態(tài)進(jìn)入地圖的單位添加到Indexer 系統(tǒng)中。和上一個觸發(fā)原理相同。手動添加單位進(jìn)入的觸發(fā)。需要先設(shè)置 Index_Unit0 為需要添加的單位,然后運(yùn)行 AddIndex 觸發(fā)器(無視條件)。原理同上。死亡的單位移出Indexer 系統(tǒng)。無論死亡的單位是不是擁有最大的自定義值,F(xiàn)lag的值都需要 -1.4. 增強(qiáng)的 Indexer系統(tǒng)4.1 給 Indexer 系統(tǒng)添加更多更復(fù)雜的功能新建了如下觸發(fā)。這里是給進(jìn)入 Indexer 系統(tǒng)的單位注冊受傷害事件,通過這種方式做到捕獲任意單位受傷害。之后還需要改造一下前面的觸發(fā):手動添加單位的時候就不需要再
6、運(yùn)行觸發(fā)了,一般這種情況都不需要動態(tài)做,如果需要,自己再加上運(yùn)行觸發(fā)即可。4.2 學(xué)著自己添加一個新功能我想做一個檢測單位移動速度變化的觸發(fā)。如下所示。新建了一個變量我用 New_Speed 變量記錄單位移動速度,然后每0.01 秒與單位當(dāng)前移動速度做比較。但是這么做還不夠!還存在著不少bug !首先:給一個不確定大小或很大的數(shù)組設(shè)置數(shù)組大小是不明智的(大家都懂的?。?。而變量如果不設(shè)置初始值,就會發(fā)生一個現(xiàn)象:訪問到未賦值變量時,觸發(fā)就會中斷。到選中的這一行時就已經(jīng)運(yùn)行不下去了。同時整個循環(huán)也都無法繼續(xù)。這時候上面創(chuàng)建的 AddExFunction 觸發(fā)就開始發(fā)揮作用了。在這個觸發(fā)添加這一行即
7、可避免變量未賦值導(dǎo)致的函數(shù)中斷。這樣就結(jié)束了么?當(dāng)然沒有。在單位死亡移出 Indexer 系統(tǒng)時,單位的自定義值發(fā)生了變化,因此這里還需要加一行。這個方法雖然管用。但是也面臨著一個缺陷,隨著自己添加的功能逐漸增加,單位死亡時需要重新賦值的變量也會相應(yīng)增加,導(dǎo)致 ExitIndex 觸發(fā)越來越復(fù)雜。為了避免這個狀況,這里引入了雙 Indexer 。4.3 雙 Indexer 的原理及使用方式對上節(jié)出現(xiàn)的問題提出一個雙Indexer 的解決方案。方案原理為采用一個數(shù)組來記錄單位對應(yīng)的數(shù)組索引,而不是簡單的采用單位自定義值,這里簡稱這個單位對應(yīng)的數(shù)組索引為“索引”。這個數(shù)組被稱作雙Indexer 數(shù)
8、組,簡稱D 數(shù)組。 D 數(shù)組為一個整數(shù)數(shù)組,默認(rèn)的值即是數(shù)組索引,例如a1=1,a2=2以此類推。當(dāng)然D數(shù)組初始化是沒有賦值的。D 數(shù)組賦值的長度為Indexer 系統(tǒng)曾經(jīng)達(dá)到的最大單位自定義值。超出現(xiàn)有長度而新賦值的變量值一定是索引值,而已經(jīng)賦值過的部分將會產(chǎn)生變化。原本的 Indexer 系統(tǒng)雙 Indexer 系統(tǒng)可見,只需要改變 D 數(shù)組中數(shù)字的排列順序,就可以使得系統(tǒng)中單位排列緊湊,避免更改其他數(shù)組的值。同時通過索引獲取對應(yīng)單位也需要新建一個單位數(shù)組來記錄。雙 Indexer 系統(tǒng)新增了 3 個變量, Flag2 、Index 和 Search。其中 Flag2 數(shù)量)大于是用來記錄
9、 D 數(shù)組初始化過的最大索引,當(dāng)Flag2 時,就需要給D 數(shù)組賦值。 IndexFlag 值( Indexer 系統(tǒng)中單位整數(shù)數(shù)組就是D 數(shù)組。 Search 數(shù)組和Index數(shù)組是個互反的數(shù)組,即Indexb=c,則Searchc=b。這樣就可以通過UnitSearch 索引 獲得索引值對應(yīng)的單位。三個將單位添加到Indexer 系統(tǒng)中的觸發(fā)都做相應(yīng)變化。單位移出系統(tǒng)時的觸發(fā)。看起來很長,其實(shí)就是數(shù)組中的兩個值互換賦值。5. Indexer位移系統(tǒng)如果要說 Indexer 位移系統(tǒng)與其他位移系統(tǒng)的區(qū)別,有兩個主要的區(qū)別:1 是采用中心計時器來進(jìn)行位移,效率高,可以支持同時位移的單位數(shù)量更多
10、2 是通過全局變量和運(yùn)行觸發(fā)(無視條件)可以輕松的設(shè)置單位在位移路徑中或位移結(jié)束時的額外效果,比如沿途傷害、到達(dá)目標(biāo)點(diǎn)后暈眩周圍單位等,甚至“碰到一個單位后停止位移并擊退碰到的單位”這種比較復(fù)雜的功能也是可以的。位移系統(tǒng)的變量設(shè)置如下:我知道肯定被嚇傻了。這里一一解釋。Angle即角度,是指位移時下一點(diǎn)與當(dāng)前位置的偏移角度,Dl則是偏移距離。During是一個常數(shù)變量,游戲過程中不會變化,用來設(shè)定位移系統(tǒng)的運(yùn)行間隔,與單位位移的流暢度有關(guān),一般推薦0.03 和 0.025 ,不推薦小于0.01 的值。 Group是正在位移的單位加入的單位組。每個間隔運(yùn)行位移系統(tǒng)時都會對該單位組中的單位進(jìn)行循環(huán)
11、位移。Index用來記錄正在位移的單位的索引值。L 記錄單位已經(jīng)位移的距離,L0 則是單位位移過程的最大距離。P0 和P1 兩個點(diǎn)變量用兩點(diǎn)間距和兩點(diǎn)夾角來計算單位位移的距離和角度,開始位移和位移過程中都會用到。Pathable 和 PItem 是位移系統(tǒng)內(nèi)部包含的一個可通行判斷系統(tǒng)的變量,后面再說。TriggerB和TriggerC分別是位移過程中和位移結(jié)束時運(yùn)行的觸發(fā)。Tu是朝著單位沖鋒時的目標(biāo)單位。 TX 和 TY 記錄位移過程中一次位移改變的位移的方式(目前只有對點(diǎn)位移和對單位位移,值分別為xy 坐標(biāo)值。0和1)。Type用來區(qū)分位移系統(tǒng)的觸發(fā)如下:觸發(fā)事件不能直接用變量,這是用變量設(shè)
12、置觸發(fā)的正確方式。循環(huán)單位組,并判斷位移方式。Index_Index單位自定義值 就是雙 Indexer 系統(tǒng)獲取單位索引的方法。U 和 Index 兩個變量都作為全局變量傳參,用于Movement1 、 2 觸發(fā)。對點(diǎn)位移的觸發(fā)。 L 每次運(yùn)行增加 Dl,當(dāng) L>=L0 時則位移結(jié)束,運(yùn)行觸發(fā) TriggerC 。否則運(yùn)行 TriggerB 。這里用 P0 極坐標(biāo)位移至 P1 來獲取位移的目標(biāo)點(diǎn)。也可以直接坐標(biāo)運(yùn)算。由于 Indexer 位移系統(tǒng)本身效率就較高,所以不考慮坐標(biāo)運(yùn)算和點(diǎn)運(yùn)算這點(diǎn)效率。向著單位位移有點(diǎn)不同。需要的變量為目標(biāo)單位Tu 和每次位移的距離Dl。其他的都是計算單位坐
13、標(biāo)的臨時變量。這里的64 是兩個單位的碰撞范圍之和(一般單位的碰撞為 32 左右),強(qiáng)迫癥患者可以枚舉下單位碰撞。下面介紹一下碰撞判斷系統(tǒng)。這里只判斷地面單位可通行,即移動類型為地面的單位所能通過的地形。這里利用創(chuàng)建物品的坐標(biāo)與物品實(shí)際坐標(biāo)之差小于3 來判斷是否可通行。注意這里的碰撞檢測包含了樹木的碰撞。如果沿途破壞樹木,可以在TriggerB 觸發(fā)中破壞樹木然后動態(tài)的檢測碰撞。位移系統(tǒng)的演示如下:這里大部分都是給變量賦值,復(fù)雜一點(diǎn)的敵法在中間的循環(huán)部分。作用是檢測單位到位移目標(biāo)點(diǎn)的路徑上距離目標(biāo)點(diǎn)最近的一個可通行地面。這樣可以很好的防止單位位移后卡在地形里面不能動。NullTrigger 就
14、是這貨,如其名稱,啥都沒,即位移結(jié)束后啥也不干。TriggerB 的函數(shù)。就是在位移途中檢測范圍內(nèi)敵軍單位。如果檢測到就給個傷害和馬甲暈。移除Group 即結(jié)束位移。對單位的沖鋒就簡單多了。不過這里并沒有考慮地面碰撞。一般情況沖鋒的目標(biāo)單位也是地面單位,所以沖過去一般就在可通行地面。發(fā)生問題的幾率不高。這里是可以同時對敵軍友軍的閃電鏈。沖鋒結(jié)束后判斷是敵軍就給傷害。如果沖鋒的不是觸發(fā)單位,而是新建的一個馬甲單位,需要手動加進(jìn) Indexer 系統(tǒng),因為單位進(jìn)入可用區(qū)域事件延時。直接獲取單位取到 Indexer0 的值。Indexer會獲Buff 系統(tǒng)教程1. Buff 系統(tǒng)是什么Buff 系統(tǒng)
15、是模擬技能給單位添加一定時間的持續(xù)效果的系統(tǒng)。這里通常使用龍卷風(fēng)減速光環(huán)( Aasl)作為添加 buff 的模板技能。減速光環(huán)的優(yōu)越性在于光環(huán)技能可以設(shè)定不同的 buff 且不同 buff 可以同時存在,同時減速光環(huán)沒有技能圖標(biāo),因此不需要像添加其他技能(如暴擊,閃避)一樣將技能放進(jìn)魔法書并禁用。這里的 buff 系統(tǒng)功能包括添加某個技能一段時間(包括但不局限于龍卷風(fēng)減速光環(huán))并且在刪除技能的同時刪除魔法效果。以及單位死亡時移除添加的技能。移除技能時可以選擇一個特殊效果(比如護(hù)盾技能結(jié)束后回復(fù)生命值)。由于是光環(huán)模擬 buff ,因此沒有 buff 圖標(biāo)閃爍的功能。2. Buff 系統(tǒng)的構(gòu)成B
16、uff系統(tǒng)所需的變量如上所示。其中During是Buff系統(tǒng)檢測Buff剩余時間的間隔(這里使用一個中心計時器以提高系統(tǒng)效率),和位移系統(tǒng)一樣,默認(rèn)采用0.03 秒周期。 Unit 是添加技能的單位, Id 是添加的技能, Buff 是技能持續(xù)時間結(jié)束時需要刪除的技能 buff , Time 是記錄添加技能的剩余時間, Trigger 是技能結(jié)束時運(yùn)行的觸發(fā),F(xiàn)lag 代表 Buff 系統(tǒng)當(dāng)前的 Buff 上限 .Loop 用來當(dāng)做 Buff 系統(tǒng)循環(huán)判斷時的數(shù)組索引.Buff系統(tǒng)所用到的觸發(fā)如下:Buff 系統(tǒng)的初始化觸發(fā).類似于位移系統(tǒng) ,通過觸發(fā)添加事件將變量During 作為計時器循環(huán)
17、的周期 .主要觸發(fā).上面的循環(huán)是判斷Buff是否到期。下面的循環(huán)是從Buff系統(tǒng)的數(shù)組中移除已經(jīng)結(jié)束的Buff (這里將Unit數(shù)組的值設(shè)為沒有單位來標(biāo)記Buff結(jié)束)。判斷 Buff 剩余時間的觸發(fā)。沒啥好說的,簡明易懂。添加 Buff 的觸發(fā)。這里分別將添加buff 的單位、添加的技能id、技能的 buff 、持續(xù)時間賦值給為Unit0,Id0,Buff0,Time0,然后運(yùn)行觸發(fā)即可。演示如下這是給單位添加 0.5 秒粉碎的方式。 Buff 設(shè)置為拔樹,當(dāng)做是空 Buff 。為了避免沖突也可自己新建一個空 buff 。移除單位 Buff 的觸發(fā)。如果不是強(qiáng)調(diào)Buff 在單位死亡的瞬間有特殊功能,可以無視這個觸發(fā)。因為Buff 系統(tǒng)在循環(huán)判斷時也有移除死亡單位buff 的功能。3. Buff 系統(tǒng)的應(yīng)用示范這里用斧王的反擊螺旋為例做示范。這里制作的反擊螺旋在觸發(fā)的最小間隔(這里是0.55 秒)內(nèi)英雄身上是沒有魔法效果的(dota 里面反擊螺旋學(xué)習(xí)是用輝煌光環(huán),因此單位身上有buff )。首先技能設(shè)置:用專注光環(huán)做轉(zhuǎn)的學(xué)習(xí)模板,記住光環(huán)的目標(biāo)允許自己。魔法效果、文本等由于是演示,所以并未作更細(xì)致的模仿。從上面那個技能復(fù)制一個過來。目標(biāo)允許改完“沒有”即可讓buf
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 教育機(jī)構(gòu)二零二五年度兼職教師聘用含知識產(chǎn)權(quán)保護(hù)合同
- 二零二五年度智慧城市項目經(jīng)理職位聘用合同
- 語文文學(xué)鑒賞能力考核題
- 新能源汽車充電樁網(wǎng)絡(luò)規(guī)劃方案書
- 新興消費(fèi)市場消費(fèi)者行為分析與營銷策略研究
- 企業(yè)績效評估咨詢服務(wù)協(xié)議
- 農(nóng)村資源環(huán)境保護(hù)及修復(fù)協(xié)議書
- 農(nóng)業(yè)市場推廣策略實(shí)戰(zhàn)案例分析
- 社區(qū)團(tuán)購電商平臺合作合同
- 農(nóng)業(yè)合作組織規(guī)范化管理手冊
- 《大氣細(xì)顆粒物及其主要組分致肺衰老與纖維化的分子機(jī)制研究》
- 2024版《中醫(yī)基礎(chǔ)理論經(jīng)絡(luò)》課件完整版
- 期權(quán)入門基礎(chǔ)知識單選題100道及答案解析
- 2024光伏發(fā)電施工工程機(jī)械設(shè)備安全技術(shù)操作規(guī)程
- 中國華電校園招聘在線測評題
- 中建企業(yè)建筑工程項目管理目標(biāo)責(zé)任書(范本)
- 三年級全一冊《勞動與技術(shù)》第二單元 活動1《包書皮》課件
- 2024-2025學(xué)年湖南省長沙市雅禮教育集團(tuán)八年級(上)創(chuàng)新素養(yǎng)數(shù)學(xué)試卷(含答案)
- 中醫(yī)藥膳專題講座培訓(xùn)課件
- 2022版義務(wù)教育藝術(shù)課程標(biāo)準(zhǔn)美術(shù)新課標(biāo)學(xué)習(xí)解讀課件
- 辦公樓建筑結(jié)構(gòu)設(shè)計(畢業(yè)設(shè)計)
評論
0/150
提交評論