切換
舊版
前往
大廳
主題

【教學】UI 實作 - 中

靈魂 | 2020-01-15 22:13:49 | 巴幣 108 | 人氣 303


接續上次的主題繼續進行實作

在UI實作 - 上中,已經說明了Scene的運作、Sprite的用法、Window類的簡單介紹,並且完成了Window_Gold(隊伍金錢)的部分。

那麼這次就繼續完成剩下的Window_Menu_Map_Name(地圖名稱)、Window_PlayTime2(遊玩時間)、Window_MenuStatus2(玩家狀態)、Window_MenuCommend(選單選項)。


Window_Menu_Map_Name(地圖名稱):
由於$game_map內沒有mpname的方法所以會報錯,這裡寫的mpname是用來讀取地圖名稱的,RMXP預設是沒有提供地圖名稱給人使用的(很奇怪對吧),所以必須自己寫方法來獲取地圖名稱,而該方法須寫在game_map(各項地圖資訊)裡。

Ruby允許以同個class名稱繼續編輯,它會判定兩者是一起的,所以可以額外添加不同的內容進去。
但是定義的方法(def)可就不是這一回事了,如果今天同個class內已經有了mpname的定義,那麼如果用mpname再定義一次,就只會重新定義mpname這個方法而已,最初的那個mpname所定義的東西可就完全用不了的。

那麼該如何繼續使用最初的定義繼續添加新的內容呢?
這時就使用alias(別稱)就可以了

還有attr_reader是什麼呢?

其實除了attr_reader外還有attr_writer與attr_accessor,這些在RMXP預設腳本的一系列Game_XXX都可以看的見,這些東西主要在自動幫你建立getter(讀取)、setter(寫入)的方法,這兩個方法可以方便你去獲取與設定參數

attr_accessor:建立getter(讀取)、setter(寫入)
attr_reader:建立getter(讀取)
attr_writer:建立setter(寫入)

不然每個參數都要寫一個getter或setter的話,可是挺麻煩的,下圖示範原先的getter、setter寫法,以上面的map_id為例
雖說這兩種getter、setter的用法都有好壞,就自行斟酌使用了


Window_PlayTime2(遊玩時間):
這部份很多,畢竟使用到了很多不同的類別跟定義( ´_ゝ` )

這邊我只說明draw_text部分,可以看見有5個draw_text
這實際上是在做文字外框的描繪,先將文字顏色轉成灰色,再描繪文字於x+1 y+1、x+1 y-1、x-1 y+1、x-1 y-1四方位,效果如下圖
左邊是有外框,右邊的則沒有

雖然這麼做會有最基本的外框,但其實挺吃效能的,所以建議不要這麼做
由於RM的字體渲染是用其他的方式運行的,若要禁用的話請參考這裡
在RMXP內的說明文檔,也有提到:"若處於時常調用refresh的情況下,請減少使用draw_text,因為渲染需要時間。"


Window_MenuStatus2(玩家狀態):
draw_face ~ draw_Lv這幾個的定義都可在Window_Base內找到,而有些我用了別人的腳本,原先RMXP並沒有顯示血條的功能、也沒有顯示狀態圖標的功能,這兩種腳本都很好找,使用方法基本上都跟原本預設的差不多,若有找到其他的腳本也可以試試。

而游標矩形更新(update_cursor_rect)之所以省略,是因為之後會換用其他方式來顯示游標狀態,原先預設的游標為一個矩形框框,會隨著索引值移動然後閃爍,嗯…挺一般。

關於draw_face ~ draw_Lv 的 Window_Base:
這邊說一下RPG::Cache.XXX的用法
這個用法是用於快取圖片的時候用的,他實際上是在做load_bitmap
而RPG::Cache.XXX的後面XXX的部分可以自己定義,當然想要讀取哪個資料夾的東西也可以自己改,而他所使用的是相對路徑。
只要這樣子去新增RPG::Cache的部分,以後就可以使用RPG::Cache.menu去讀取Graphics/menu內的檔案了。


Window_MenuCommend(選單選項):
這部分大多都已經被父類給定義好了,所以只要提供一些參數就可以實作出選項



那麼至此Menu畫面所需要的類別、方法都建立好了,就只差放進Scene內調整並且看看效果了,這部分就留到下次吧,我想不久就會有下一篇了。

在此附上本篇與上篇的範例:點我
有興趣的人可以下載下來看看,又或者是參考教學把方法寫進Scene
下一篇會附上些驚喜(?


--下次為 UI 實作 - 下
送禮物贊助創作者 !
0
留言

創作回應

洛可C
受益良多@@
2020-01-18 16:22:26

更多創作