精華區beta WOW 關於我們 聯絡資訊
在上篇以及之前的範例中 大家可以瞭解到UI的本體其實都是frame 有了本體才能以SetScript來讓他主動去執行我們所寫的script *註1 (或以HookScript來掛上script 接在SetScript的東西後執行) SetScript可以讓frame在註冊的事件觸發的時後自動去執行我們設定的程式 但要是事件不只一樣呢? 以下舉CombatEvents中的一小段作為範例 (由於字數限制有簡化過) STEP I&II 請延續上篇 以下從 STEP III 開始玩 STEP III 打開core.lua 貼上以下東西 (--表示是註釋,可以不用貼進去) local f = CreateFrame("Frame") --建立一個Frame用來監聽事件 f:RegisterEvent("PLAYER_REGEN_ENABLED") --註冊事件, 玩家回血時觸發 f:RegisterEvent("PLAYER_REGEN_DISABLE") --註冊事件, 玩家不回血時觸發 f:SetScript("OnEvent", --在事件觸發時執行以下script function(self, event) --註2 if event == "PLAYER_REGEN_DISABLE" then --停止自動回血也就是進入戰鬥 print("進入戰鬥") --在對話框顯示 進入戰鬥 elseif event =="PLAYER_REGEN_ENABLE") then --開始自動回血也就是離開戰鬥 print("離開戰鬥") --在對話框顯示 離開戰鬥 end --結束if end --結束function ) --SetScript最後的) 註1: 沒有本體也可以設定slash command去手動執行script (範例 /紅字) 註2 這邊引入了兩個變數並命名為self及event self代表的是f這個frame本身 (因為我們SetScript是set在f上嘛) event則是OnEvent時的事件名稱 所以我們在這邊引入這個變數用以分辨不同事件 但要是事件只有一項 或是不同事件觸發時都做一樣的事情 那當然不用這樣做囉 因為都是做同樣的事~ 所以不需要去區分 (範例 /memory) 但還有一種情況是事件發生時會有很多變數可以用 最著名的就是COMBAT_LOG_EVENT_UNFILTERED這個事件了 也就是俗稱的CLEU 由於人生就是不斷的戰鬥 所以他最實用 這也導致只要bz一偷改這個東西的變數時 很多UI就會開始哀嚎 這邊就先不提 有興趣可以 google 或是打開之前發的CombatEvents的lua檔來參考 ↓ http://www.google.com/search?q=COMBAT_LOG_EVENT_UNFILTERED EXERCISE 瀏覽所有的Events http://www.wowwiki.com/Events_(API) PREP SetScript除了OnEvent之外還能幹嘛 http://www.wowwiki.com/Widget_handlers 多這兩項是因為上回被噓內容太淺 阿幹我也是初學者啊 這我自學心得吶 -- (RC)) RL: 戰士, 你減傷@#$%?(模糊模糊) [R] 防戰: 啥?聽不清楚? 回音好大聲 [R] 術士: 你減傷幾啪 [R] 法師: 問你減傷幾啪 [R] 戒騎: 你減傷激巴 [R] 防戰: 你才積芭 ~所以最後減傷到底多少的某日Raiding~ -- ※ 發信站: 批踢踢實業坊(ptt.cc)
HTRex:... 10/18 18:59
ak147:幹麻將...換頁對齊好難 10/18 19:01
VendeRox:看到有關程式語言的東西就濕了....... 10/18 19:02
ak147:其實就長一點的巨集... 10/18 19:05
look32019:... 10/18 19:17
alyh: 幹麻將...換頁對齊好難 XDDDDDD 10/18 19:18
look32019:你為什麼要幹麻將.... 10/18 19:22
好硬
ayaka0527:大家好 我是羅志祥 10/18 19:22
樓上正妹小香
stanwhale:喔喔 SetScript嘛 我小時候常常拿來玩呢 10/18 20:34
ak147:那第三篇OnUpdate就交給stanwhale了(逃跑 10/18 20:41
※ 編輯: ak147 來自: 114.37.75.204 (10/18 21:02)