[心得] 淺學UI心得 Part1<革新二版>

看板Programming作者 (大笨羊)時間15年前 (2010/02/09 17:17), 編輯推噓1(101)
留言2則, 2人參與, 最新討論串1/1
※ [本文轉錄自 Test 看板] 作者: wa007123456 (大笨羊) 看板: Test 標題: [心得] 淺學UI心得 Part1<革新二版> 時間: Wed Feb 10 01:13:18 2010 ※ [本文轉錄自 WOW 看板] 作者: wa007123456 (大笨羊) 看板: WOW 標題: [心得] 淺學UI心得 Part1<革新二版> 時間: Wed Feb 10 01:06:00 2010 一、簡介: 魔獸世界(World of Warcraft)全球知名的線上遊戲,除了 其獨特的設計之外,也提供玩家自行設定介面的功能。本 篇文章重點都是關於魔獸世界的API Lua語法和XML的探討, 希望這篇文章能拋磚引玉,主要針對沒學過程式的人,吸引 台灣更多人來作魔獸世界的使用者介面。 二、如何安裝插件 魔獸世界(以下簡稱wow)安裝插件的位置是從你安裝的路徑 來判斷,如果你下載了一個UI,他通常是一個資料夾,裡面 包含了一些插件的檔案(XML toc lua),首先複製或剪下插 件的資料夾,然後放到以下位置: ..\World of Warcraft\Interface\AddOns 之後打開wow,會發現在選擇角色的的地方,左下角出現了 "插件"的按鈕,打開他就可以看到有關於你插件的使用情形 ,按下核取方塊來啟動你所安裝的插件,然後點進入遊戲 就可以看到此插件的情形了。 三、製造一個空的插件 首先在..\World of Warcraft\Interface\AddOns的位置下 面新增一個資料夾,把他取成你想要的插件名稱,然後在 資料夾下面產生一個*.txt檔案,並更改副檔名為.toc, 之後利用記事本編輯頁面內容 輸入以下文字: ## Interface: 30300 ## Title: 你想要的標題名稱(美國) ## Title-zhTW:你想要的標題名稱(台灣) ## Title-zhCN:你想要的標題名稱(大陸) ## Author: 你的名稱 ## Version: 版本編號 ## Notes-zhTW: 簡介 ## eMail: 你的的e-mail ## DefaultState: Enabled ## LoadOnDemand: 0 請注意,檔案名稱必須和資料夾名稱一樣,不然wow的系統 不會偵測到此插件,之後進入遊戲,你就會發現你的插件 出現在插件管理器裡面,這代表你成功的完成了一個空的 插件。 四、Lua語法快速導覽 Lua是一種嵌入式的語言,他可以嵌入某些以編譯好的程式 之中,由於他是直譯式的語言,所以和C語言不太一樣,不 需要宣布型別,以下開始介紹簡單的Lua語法。 1.甚麼是變數? 變數是程式裡面最基本的元件,如果沒有他就無法跟程式 進行互動,在Lua裡面由於變數不需要宣布型別,因此數字 可以輕鬆變成字串,而字串也可以變回數字。 所謂字串就是由多個char(字元)所構成的型體。 例如說: str1="Welcome"; 就代表說我宣告了一個叫做str1的字串,他的內容是"Welcome" 實際上在記憶體裡面是'W' 'e' 'l' 'c' 'o' 'm' 'e'所連續構 成的,這也是為什麼他叫做字串的原因。 如果要輸入數值型別 請造我這樣做: no=1; 這樣就宣告一個叫做no的變數,他的內容是1 但是變數之所以可以稱為變數,就是他的值可以任意改變。 我可以在同一個Lua檔案裡面寫如下: no=2; 此刻no的值就變成2了。 另外要注意的是,變數名稱的合法性,也就是說不能輸入有衝突的名字 開頭不能是數字 不能是關鍵字(for function...etc) 關鍵字大全: and break do else elseif end false for function if in local nil not or repeat return then true until while 不然直譯的時候會發生錯誤。 另外有一件事情一定要記得,請為你的變數取有意義的名稱, 這種方式叫做匈牙利命名法,盡量少使用像是a b c等讓人無法看懂得變數 而是改成num sum current state count...等比較有意義的單字。 這樣做可以幫助你Debug的時候更容易。 2.變數的基本運算 如果不能進行變數的計算,那得到的資料也無法產生結果。 我們先談談數值型別的加減 例如: no1=5; no2=5; no3=no1+no2; 此刻no3的值會變成10 以下列出所有的運算子 + :把兩個數字或是變數進行相加的功能 - :把兩個數字或是變數進行相減的功能 * :把兩個數字或是變數進行相乘的功能 / :把兩個數字或是變數進行相除的功能(注意 / 後面不可以是0) % :把兩個數字或變數進行相乘後得到餘數的功能 以下進行一個比較複雜的運算: result=(1*2)%3+(9-4)/5; 之後result的值會是1,記住,要先計算的變數請括號起來, 不然程式會使用四則運算的方法來進行,可能會跟你預期的 內容不同。 3.字串 之前有提到字串是一組連續的char所構成 在Lua裡面數值轉字串是非常容易得一件事情 例如: no1=123; str1="The Num is:"..no1; print(str1); 會在螢幕上面印出"The Num is:123" 注意兩個字串或是字串跟數字的串連方法就是 使用 .. 運算子 .. :把兩個字串連接起來 4.註解 要產生註解其實很簡單,例如 no1=1 --宣告一個變數 內容為1 其中--後面的字不會被執行 為什麼要產生註解? 因為你寫的程式別人未必會看得懂 而且可能時間一久你就忘了他是怎 麼運作的,養成寫註解的習慣很重要。 5.資料與型別 雖然之前說,直譯語言並不需要型別的宣告。 但是事實上'1'和1的內容並不相同,所以這 一小節簡單介紹一些基本的資料型別。 nil:這代表是空的意思,通常是用來判斷某些事情有沒有成功 或是回傳值的用法,如果物件沒有宣告成功那就是一個nil值。 Boolean:中文譯作布林,他只有兩種值,一個是true(真)一個是false(假) 用來做一些邏輯運算。 Numbers:數值型別 String:字串型別 Table:物件型別,請你想像一張明信片上面,有人的名字 圖片 地址 電話 等...資料,而物件型別就是一張明信片,裡面有多個成員。 請看以下範例: table1 = {} -- 產生一個物件 k = "x" table1[k] = 10 -- 產生一個成員 key值是"x" 內容是10 a[20] = "great" -- 產生一個成員 key值是20 內容是"great" print(a["x"]) -- 印出10 k = 20 print(a[k]) --> 印出great table["x"] = table["x"] + 1 -- "x"成員加1 print(a["x"]) --> 11 範例中產生了一個table1物件 其中用k來當作關鍵值 並設定這個成員的內容為10 然後再設定20來當作關鍵 值然後產生一個成員內容是"great" 然後再分別印出他們。 6.函式 產生一個函式的方法為 function func_Name () end 為什麼要用函式? 其實函式跟數學上的函式非常相似 都是一連串的計算 然後回傳某個值這樣 只是數學上面的函式你必須還要自己算一遍 但是電腦上的函式 電腦會幫你運算 因為某些運算的事情可能比較複雜 也可能會一直重複如果沒有使用函式 程式的開發速度就會變慢很多 我會在wow API中再度提到。 7.關係運算子 以下簡列一些關係運算子 < :小於 > :大於 <= :小於等於 >= :大於等於 == :完全等於 ~= :不等於 運算子會測驗兩個變數的關係 然後回傳true或是false 8.邏輯運算子 and:且 運算子 or:或 運算子 這兩個運算子有甚麼差別呢? 請看下面 a.andd運算子是說當兩方都是真的時候 才會回傳真 不然就回傳假 b.or運算子是說兩方只要有一個是真 就會傳回真,只有兩個都是假的時候 才會傳回假。 9.全域變數和區域變數 在Lua中,可以宣告local讓變數變成區域變數, 以避免重複的變數宣告。 甚麼叫做區域變數? 區域變數就是離開某個範圍的時候 就會被釋放掉的變數 這麼做是為了要讓程式執行的速度更快更好 全域變數則是直到程式結束,才會釋放掉的變數 10.流程控制 電腦中 總是避免不了一些邏輯判斷 這個時候我們就需要一些流程控制的方法: 以下簡介流程的結構 if:主判斷式 elseif:附從判斷式 else:最終附從判斷式 讓我舉一個簡單的例子: if(no1==no2) then print("no1 等於 no2"); elseif(no1~=no2) then print("no1 不等於 no2"); else print("這是甚麼?"); end 第一個判斷式會判斷no1是不是等於no2 第二個判斷式會判斷no1是不是不等於no2 第三個判斷式則是上述都不成立的時候出現 利用判斷式可以做很多事情,例如你希望 發生甚麼事情後 才會執行某個函式。 這都需要判斷式的幫忙。 11.陣列 寫程式的時候,難免會遇到要宣告很多變數的時候, 在變數少的時候或許還好,可是只要人一變多,就會 讓你打到手痛。 讓我們看看下面的例子 no1=1; --我宣告了一個變數 no2=2; --我又宣告了一個變數 no3=3; --我還是宣告了一個變數 no4=4; --奇怪我怎麼還在宣告變數 no5=5; --是不是快要宣告完了? no6=6; --天阿 救救我離開這個無限宣告的定義... ......... 所以說我們需要一個東西,他叫作陣列 他的宣告方式如下: no={1,2,3,4,5,6}; 我可以很方便的取用各種數值 temp=no[2]; --temp=2 這是陣列很大的功用 當然你可以在[]裡面加入變數或是字串 用動態的方式存取陣列 12.重複結構 有時候程式也需要某些重複運算的地方, 我們希望縮短程式碼的長度 因此發明了重複結構 簡單介紹兩個常用的重複結構 while:當你不知道甚麼時候會結束的重複結構 for:你確定甚麼時候可以結束的重複結構 利用while舉例: local sum = 0,i=1 while i<=10 do sum = sum + i; i=i+1; end print(sum); 上述程式碼在進行1+2+3...+10的事情 其結果為55 利用for舉例: for的樣式是長這樣: for var=exp1,exp2,exp3 do something(); end 會不斷的執行something函式 其中用var當作基底值 跟 exp2比較 並相加exp3的值 在跟exp2比較 直到exp3傳回真為止 例如: local sum=0; for i=1,i<=10,1 do sum=sum+i; end print(sum); 其結果為55 =============================Part1 結束====================================== -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.228.221.7

02/10 01:08,
快推 雖然我看不懂 XD
02/10 01:08

02/10 01:10,
其實這篇是共通的程式設計基礎XD
02/10 01:10

02/10 01:10,
推你有心..
02/10 01:10

02/10 01:11,
今天看起來無關...不過明天我會提WOW的API
02/10 01:11

02/10 01:11,
這篇是基礎篇 可能跟魔獸沒關係 囧 但是很重要
02/10 01:11
-- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.228.221.7 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.228.221.7

02/11 00:48, , 1F
這似乎是LUA... 跟UI好像沒太大的關係吧
02/11 00:48, 1F

02/11 14:18, , 2F
要等他講到API那邊0.0
02/11 14:18, 2F
文章代碼(AID): #1BSPYIiH (Programming)