切換
舊版
前往
大廳
主題

【Forge】一個正確編寫GUI的正確姿勢。Part 04 (End)

格子@懷念光牧的社畜 | 2015-03-13 13:02:49 | 巴幣 12 | 人氣 264

前言:
        其實上一章結束的還蠻倉促的,並沒有真的幫GUI先生穿上衣服。
        這次就來穿新衣吧!

第1節: 真。穿衣服。
        首先我們要先把圖片丟進去Eclipse裏頭,或者是直接丟進去資料夾也可以。
        但是我們先建立放圖片的資料夾吧!

        不意外的話,請到resources資料夾底下,建立一個套件(Package),並且依照下列的格
        式命名。

        assets.[mod id in lower case].textures.gui

        這邊我不詳加多做贅述,中間用中括號括起來的部分請替換成Main檔(Tutotrial.class)裏
        頭的ModId,請注意使用全小寫。
        接著把你的gui的PNG檔丟(拉)進去即可。
        注:務必使用png檔,以免無法處理透明部分。

        
        做完了這些之後,我們必須要打開GuiFirst.class檔來進行一些小編輯,
        好讓圖片能夠確實的套用在GUI上頭。
        先上一張改造前的程式碼圖片:

        我們需要著墨的地方是drawScreen()這個負責刷新的函數。
        不過在此之前,先來做點宣告吧!

        
        首先先宣告了一個ResourceLocation來存放圖片的路徑,這裡的格式是:
                "[modid in lower case]:textures/gui/guiFirst.png"
        有興趣的朋友可以嘗試看看改變資料夾結構,來方便更好管理所有的GUI圖檔。

        接著宣告兩個整數,分別記錄了圖片的確切像素大小。請注意事像素大小,不是圖片大
        小。


        接下來是小重點:請注意高能量反應,防護衣、手套、眼罩還是甚麼鬼的通通都給我戴
        上!

        基礎上,drawScreen()這個函數採疊層顯示,越上面的會越先顯示,所以在設計GUI的初
        期就要善加規劃好,哪些圖片該顯示在其他圖片的上頭。以免發生Debug悲劇。

        這裡我先簡單的使用了drawDefaultBackground()來繪製一個半透明的黑色背景。
        接著綁定圖片、然後使用drawTexturedModalRect()來繪製我們的圖片。

        廢話不多說就直接上結果吧!


第2節:這個新衣怎麼穿得歪歪的?
        本節我們來稍微微調GUI的位置而已。
        然後我就大功告成功成身退了。


        這個是主要繪製繪製的函數,接下來就讓我細細道來它還可以怎麼變。
        第一個以及第二個參數x, y,是表示顯示在遊戲視窗內的哪一個座標。
        目前是0, 0(左上角)為基準開始繪製。
        那如果我想要顯示在正中央的話。我需要這樣更改我的程式碼。


        這裡稍微考驗到一點數學。
        width跟height可以直接取得遊戲視窗的像素大小,
        那麼我們將遊戲視窗的大小減去圖片大小,然後再除以二,就可以得到X座標;
        Y座標亦然,不過需要注意的是,在此Y座標向下為正、向上為負,
        跟現實的二維平面是不一樣的。

        做了一點小修改,這個就是結果。

        我們得到了一個跑到中央的GUI。

曲終人散:
        本次的教學也差不多告一段落了。
        當然之後有可能會開啟Extra篇來更加詳細的介紹一些Gui常用到的元件,
        例如按鈕、標籤、文字框之流的,不過總歸一句還是要我撞到頭XD"

        這邊我做個基本簡單的概述。
        截止到現在我們所完成的GUI,適合單多人遊戲使用。
        因為我們有良好的建立了一個封包系統。
        當然是個很簡陋的封包,而且其實還有更大的空間可以完善化。XD"

        最後,我不一定會開放原始碼(畢竟各種做半套的,誰要啊 - 3 -?),
        不過這很難說?如果哪天有打算出來寫教學,還是有機會再度拿出來用,
        屆時會不會開源也很難說,不過總歸一句話。
        
        本篇開來就是要釣人才的。(恕刪)
        多謝各位賞光看到現在,有任何問題我還是會盡量回答。

        我是MOCraft Studio 的格子。 我們下次(有機會)再見。

創作回應

我不是人才,不過想做模組
2015-03-14 06:15:04
格子@懷念光牧的社畜
想做模組好啊XD" M版就是缺少有心的人還有好的教學。 (眼神死
2015-03-14 12:34:07
對嘛!這麼好的教學就要配我這種人才!(剛剛不是才說不是人才嗎)
2015-03-14 12:54:51
格子@懷念光牧的社畜
XDDDDDDDD" [e34]
2015-03-14 12:58:37

相關創作

更多創作