精華區beta WOW 關於我們 聯絡資訊
UI 是 User Interface 的簡稱 他最主要的目的就是讓玩家可以 創造一個自己喜歡的介面在遊戲中 其中他使用嵌入式的語言Lua Lua簡單 並且具有力量 創造UI的第一步,是在World of Warcraft\Interface\AddOns 資料夾下面創造一個資料夾,而資料夾的名稱就會是UI的名稱 之後你必須要創造一個toc檔案,他負責有關UI的資訊跟版本 還有載入需要的XML跟Lua(toc檔案的創建可以使用筆記本,然後 更改副檔名為toc來完成) toc檔案的名稱 必須跟你資料夾的名稱一樣 一個toc檔案的內容可能如下: ## Interface: 30000 ## Title-zhCN: UI名稱 ## Author: 作者 ## Version: 你UI目前製作的版本(由製作者決定) ## Notes-zhCN: UI的簡介 ## DefaultState: Enabled ## LoadOnDemand: 0 要載入的檔案.xml 要載入的檔案.lua 如此一個toc檔案大概就完成!! 你可以增加要載入的檔案!! 第二步讓我們來創建一個XML檔案 XML檔案負責Mark-up的工作 也就是外觀 使用標記語言 如果我想要在我的UI裡面產生一個Button按鈕 我可以這樣寫 <Button></Button> 不過這樣只會產生一個預設的按鈕 因此我可以增加屬性值在裡面 例如 <Button onclick="MyClick();" name="Button1"></Button> 這樣會產生一個按鈕 按下他的時候會執行MyClick()函式 並把它命名為Button1 請注意 Button1 將會變成一個全域物件 他將可以在任何Lua檔中使用 現在我要產生一個Frame(框架) 裡面有一個Button並有大小跟位置就可以這樣寫 <Frame> <Button> <Size> <Absdimension x="100" y="40"/> </Size> <Anchors> <Anchor point="TOPLEFT"/> </Anchors> </Button> </Frame> 這會產生一個高40 寬100 位置在左上的按鈕 這就是一個簡單的XML 另外XML通常會加入這一行 <Ui xmlns="http://www.blizzard.com/wow/ui" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> </Ui> 並在兩個ui標籤中間寫入自己想要的標籤來mark-up 更多資訊:http://www.wowwiki.com/XML_user_interface 再來是Lua檔 負責UI程式設計的部分 Lua是一種嵌入式語言 很多遊戲都有用到他 像是魔獸世界(廢話) Lua比較像C和VB的結合 一個Lua檔裡面 有兩個個函式一定會執行 一個是OnLoad() 另一個是 UI名稱() Lua 加入註解的方法是 加入 -- 符號 像是這個例子: unction OnLoad() SendChatMessage("Success Loaded","SAY"); end --我是註解 這樣如果成功載入Lua 並執行 你的角色就會說出Success Loaded的字出來 --後面的文字將不會被執行 另外SendChatMessage()是 WoW當中內建的函式 我們將會使用wow的內建函式來讀取許多資料 這個是函式庫:http://www.wowwiki.com/World_of_Warcraft_API 被冠上 Protected 字樣的函式 表示已經禁用!! Lua我簡單講四個部分 一個是變數 一個是迴圈 另外一個是判斷 還有就是函式 Lua是物件導向的語言 他也有物件導向的部分 其他更多請參考:http://www.lua.org/pil/ 先講變數 Lua裡面沒有分變數的種類 你不需要宣告 一切都在你給他資料時決定 像是宣告一個a變數為三 (注意變數的名字不可以是關鍵字 像if!!) 你可以這樣寫 local a=3; 這就是一個簡單的宣告變數 陣列的話就像這樣 local a[]; a[1]=1; a[2]=2; 變數的運算 就跟數學式很像 ocal a=1; a=1*3 a=1+3 a=1-3 a=1/3 a=1%3 +-不用說了 * / 一個是乘 一個是除 另外%則是取餘數 宣告一個字串 並把他印出來 ="這是字串"; print(a); --結果:這是字串 再來是邏輯判斷 分為 if if elseif if a>0 then DoSomething(); end 注意記得一個if後面要加上 then 並在最後加上end來區隔不是if的區塊 這個例子是 如果a大於0的話 將會執行 DoSomething() 函式 if a>0 then A(); elseif B(); end 這個例子就是如果a大於0的話執行A()否則 執行B() 再來是函式 一個函式的宣告可以是這樣 function Add(a,b) c=a+b; return c; end 這是一個加的函式 我可以這樣寫 e=Add(1,1); e會等於2 函式裡面可以在使用其他函式 現在來說迴圈 while a>0 do a=a-1; print(a) end 這個迴圈將會不斷的減a減1 直到他等於0為止 如果a本來就小於0 那這個迴圈就不會被執行 再來是for迴圈 for迴圈跟while迴圈最不一樣的地方就是 for很清楚的告訴了迴圈要重複幾次 而while則是不知道會要執行幾次才使用的迴圈 例如 for i=0,10,1 do a=a+i end i會慢慢的+1 然後直到10為止 其中執行a=a+i的動作 另外 第三個變數是可有可無 如果你沒有第三個變數 Lua將會自動選擇一個當作step number 例如 for i,f(x) do --做些事情 end 差不多是簡單的Lua就是這樣 更多請參考:http://www.lua.org/pil/ WOW API函式庫:http://www.wowwiki.com/World_of_Warcraft_API 初學者建議從第一章看到最後一章!!(其實我也是初學者...) 我寫得很爛 不好意思^^" -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.226.9.113
pillsib2:認真給推 雖然我end了 冏> 03/01 20:32
binarytree:推 03/01 20:33
※ 編輯: wa007123456 來自: 125.226.9.113 (03/01 20:37)
IAmLaguna: 我推 其實也end了 囧> 03/01 20:33
walker2009:喔喔喔喔喔喔喔喔喔喔喔 想學的給個推 03/01 20:34
solasga:推推...我有看了一半才end(挺) 03/01 20:34
log56:你之前那個「看起來很可疑」的ui呢??? XD 03/01 20:37
Yanrei:推一個! 雖然我是文組的... 03/01 20:37
Parhelia:lua 是好程式語言 :p 03/01 20:38
Wangdy:end 03/01 20:38
wa007123456:我之前有答應要寫中文版的UI寫法@@ 這次可能寫不好 03/01 20:45
wa007123456:我是初學者...偏偏台灣有學UI的人又很少.. 03/01 20:46
wa007123456:所以我學的真的很痛苦>< 我才高一 英文沒很強@@ 03/01 20:46
egira0719:趕快推 不然人家以為我們看不懂 03/01 20:47
Ebergies:推, 非常有用! 03/01 20:49
bigbear:身為一名唸資工系的廢物大學生 看了這篇十分慚愧... 03/01 20:50
※ 編輯: wa007123456 來自: 125.226.9.113 (03/01 20:54)
yaqw:挖喔喔喔 好男人~~ 03/01 20:54
yamietony:快推不然別人以為我們看不懂 冏> 03/01 20:54
lympho:才高一....太強了!! 03/01 20:55
ZakuSIN:嗯~其實是基本程式語言而已 視窗程式設計 03/01 20:56
wa007123456:我還不是很清楚 Lua 怎麼用struct 跟 class..@@ 03/01 20:57
wa007123456:基本上我還是繼續我的C/C++吧 囧 然後API用MFC @@ 03/01 20:57
wa007123456:我用Framework.NET寫過一個天賦模擬器@@ 03/01 20:58
Fenikso:toc的Title跟Notes用zhTW比較好 你不愛台灣(逃 03/01 20:59
wa007123456:我家族裡面有放很多我寫的程式@@ 03/01 20:59
wa007123456:http://tw.club.yahoo.com/clubs/sillysheep/ 不過要 03/01 21:00
wa007123456:登入才能看.. 03/01 21:00
Fenikso:lua沒有struct,全部用table(類似c的array)搞定 03/01 21:02
Fenikso:其實我不太確定 不要管上面那句(逃 03/01 21:02
Sechslee:推!! 03/01 21:03
wa007123456:像是這個..http://www.badongo.com/file/13624588 03/01 21:04
wa007123456:在倒數某個事情 XD 03/01 21:05
wa007123456:我想拜Fenikso為師 可以嗎>///< 03/01 21:07
Fenikso:好硬的控制碼XD 03/01 21:13
Loloya:@口@ 推一下 03/01 21:13
wa007123456:看不懂的人 可以賣一本程式初學的書 >///< 03/01 21:13
wa007123456:其實真的沒那麼難@@ 我跟你保證 @@ 03/01 21:13
lovelylion2:不是看不看的懂的問題 是想不想學的問題 ._. 03/01 21:18
winiS:別這樣 術業有專攻嘛 想學的再去研究就好了 03/01 21:24
wa007123456:不過程式設計後階段真的是要多難有多難@@ 我覺得好難 03/01 21:27
winiS:跟音樂很像啊=w=學完音階以後 突然發現編一首好歌超難XD 03/01 21:29
genephantom:Lua真的好用,幫推XD 03/01 21:37
et1218:專業文 +_+ 感謝分享 03/01 22:08
a80055power:能M嗎? 03/01 22:12
Alexboo:WoW UI Desinger可以讓你不用從輪子開始慢慢做 03/01 22:24
finaltrial:推! 03/01 22:40
babyface1977:這篇要M阿~~~~~~MMMMMMMMMMMMMM 03/01 22:51
frencesbaby:很清楚易懂 我只學過皮毛也看的很清楚! 03/01 22:59
epephanylo: nama="Button1" 應該是 name 吧? 03/01 23:48
ssnpiggy:end推 03/02 00:38
MMQSben:跟JAVA很像耶 而且很多是基本的語法 推一個 03/02 01:14
PEIRON:我也想學寫ui,這篇看起來很有用! 03/02 01:26
waneblade:先推再看~ 03/02 02:53
hshne:好文推!! MMMMMM 03/02 03:59
peachbow:基本語法看來和matlab好像喔 0.0 但是我懶的寫 XD 03/02 04:25
Naniko:end orz 03/02 05:13
※ 編輯: wa007123456 來自: 125.226.9.113 (03/02 11:11)
wa007123456:謝謝提醒>< 03/02 11:11
cloudhg:身為半個資工人(因為我是寫硬體語言的電工人)不推不行:D 03/02 13:56