【HZ/ICMod開發(fā)教程】2 - UI PART1
Try hard.
-Zheka Smirnov
本文的部分名詞與描述或許與別處有出入以至于錯(cuò)誤,歡迎在評(píng)論區(qū)指出
相較于原版MC,IC的UI系統(tǒng)并不有多復(fù)雜,可簡(jiǎn)單地用下圖概括

盡管這張圖看似過(guò)于簡(jiǎn)略,但事實(shí)的確如此??焖僬莆誙I的基本控件等內(nèi)容并不困難,但難點(diǎn)是如何用它們拼湊出美觀且實(shí)用的用戶界面
PS:本文不會(huì)講到每一個(gè)控件及其函數(shù),更詳細(xì)的內(nèi)容可見
首先在IC中,用戶界面的控件的大小和單位都是使用同一的unit單位,1unit = 窗口寬度/1000
UI資源
UI所使用到的貼圖存放于構(gòu)筑文件(build.config)所指定的gui類型的資源文件夾,在使用時(shí)只需要輸入文件名即可(不包含后綴與文件夾)
除此之外,還有:
color: 顏色,即Android的Color類,可使用android.graphics.Color.rgb(r, g, b)等自定義顏色
font: 字體,包含三個(gè)屬性,{size: 文本大小, color: 文本顏色, shadow: 文本陰影},其中文本陰影為范圍[0, 1]的浮點(diǎn)數(shù)
frame: 邊框,一般使用大小為16x16的貼圖,在使用時(shí)會(huì)被自動(dòng)拉伸至所需大小
Drawing
Drawing,顧名思義就是在界面中進(jìn)行繪制,在UI的描述對(duì)象中Drawing為一個(gè)包含繪制指令的數(shù)組
描述對(duì)象:用于設(shè)定UI以及在UI打開時(shí)對(duì)其進(jìn)行動(dòng)態(tài)修改
常用標(biāo)準(zhǔn)指令如下:
?
PS:custom drawing的canvas為Android的Canvas類
Elements
Elements,指UI中的控件,與Drawing不同的是Elements在描述對(duì)象里為一個(gè)包含各控件的對(duì)象
Elements中的每一個(gè)控件都有其唯一且獨(dú)特的名稱,即每一個(gè)對(duì)象都有其唯一的建
每一個(gè)元素都有以下基本屬性:
此處控件點(diǎn)擊對(duì)象指一個(gè)包含短時(shí)點(diǎn)擊事件和長(zhǎng)時(shí)點(diǎn)擊事件函數(shù)的對(duì)象:
同樣地,常用元素如下:
除以上元素之外,還有Scroll,Switch,Tab等元素未被提及,但用法大同小異,建議自行按照官方文檔進(jìn)行嘗試,這樣才是最有效率的學(xué)習(xí)方法
direction參數(shù):
0 - 朝右 1 - 朝上 2 - 朝左 3 - 朝下

在簡(jiǎn)要介紹完Drawing和Elments后,在介紹重頭戲Window之前先來(lái)補(bǔ)充一點(diǎn)其他內(nèi)容
自定義參數(shù)
用于修改Window的一些默認(rèn)參數(shù),如下:
?
UI.getContext()
該函數(shù)用于獲取Android UI線程的上下文,以便調(diào)用Android API來(lái)操控界面控件
例如本專欄封面就是調(diào)用Android API的簡(jiǎn)單示例
UI.getScreenHeight()
獲取以u(píng)nit為單位的屏幕高度,與之相同的還有UI.getScreenRelativeHeight()
ElementSet
元素集合
WindowLocation
窗口位置及大小,使用unit作為單位,詳細(xì)參數(shù)見官方文檔
Style
窗口風(fēng)格,有CLASSIC和DEFAULT兩種
Slot,F(xiàn)ullSlot
窗口中的物品格對(duì)象,Slot包含物品的id、特殊值、數(shù)量和額外數(shù)據(jù),F(xiàn)ullSlot則在其基礎(chǔ)上添加了如drop、set等方法
Window
在官方文檔中,窗口(Window)有如下幾個(gè)類:
StandardWindow
StandartWindow
TabbedWindow
Window
WindowGroup
在這里將暫先略講StandartWindow,Window和WindowGroup
StandartWindow
定義為UI.StandartWindow類,以一個(gè)描述對(duì)象定義界面
描述對(duì)象格式(摘自BigFish和方法放寒假翻譯的官方Wiki第8-2節(jié)):
StandartWindow是適用性最高的窗口,在多人游戲中表現(xiàn)優(yōu)于Window,但盡管如此絕對(duì)布局仍是其一大缺點(diǎn),在實(shí)際使用時(shí)需要考慮到不同的屏幕尺寸會(huì)造成的控件偏移。因此,盡量將控件放置在屏幕內(nèi)部區(qū)域
Window
相較于StandartWindow,Window的優(yōu)點(diǎn)在于其靈活性,與默認(rèn)為方塊互動(dòng)界面的StandartWindow不同,Window可以通過(guò)修改WindowLocation來(lái)顯示在游戲界面上的任意位置,且可以通過(guò)適當(dāng)修改padding值來(lái)盡可能避免控件偏移。
Window默認(rèn)沒有關(guān)閉按鈕和玩家背包欄,在使用時(shí)需要按需自行添加
WindowGroup
StandartWindow和Window都是單個(gè)窗口,如果需要復(fù)雜的界面那么用多個(gè)窗口組合無(wú)疑是最最好的選擇,將一個(gè)復(fù)雜窗口分為多個(gè)小窗口也可以提高調(diào)試效率。
WindowGroup的主要作用就是將多個(gè)Window整合在一起,將其組合布局在一起,例如現(xiàn)在的工作臺(tái)界面就是一個(gè)包含3個(gè)Window的WindowGroup
Hierarchic UI庫(kù)
由Zheka開發(fā),用于以json來(lái)定義分層式的UI,可以方便的創(chuàng)建絕對(duì)布局和線性布局,屆時(shí)json會(huì)被解析為WindowGroup
此外,該庫(kù)還可以定義視圖布局并且對(duì)于一個(gè)視圖可以靈活地嵌入到其他界面,并且基于它創(chuàng)建繼承其全部屬性的子視圖,無(wú)疑讓W(xué)indowGroup展示美觀的復(fù)雜界面更加容易。

本文到此就暫先結(jié)束了,不過(guò)因?yàn)楸疚牟]有介紹關(guān)于UI的各種函數(shù)用法(主要是懶),所以僅憑本文是不能完全掌握UI的,對(duì)于開發(fā)過(guò)程中的疑問(wèn)歡迎私信我或到國(guó)內(nèi)ICMod開發(fā)者交流區(qū)詢問(wèn)795440679,隨均不能保證及時(shí)解答,但會(huì)盡可能幫助你的
