前言:
第1節:GUI主體的良好熊抱體態。
第2-1節:如何幫GUI先生穿上好看的衣服? 之我們先搞定封包吧。
本篇有高能反應,非戰鬥人員請盡速迴避。
戰鬥人員請穿上防護衣。
第1節:GUI主體的良好熊抱體態。
首先請各位先建立一個class檔命名為GuiFirst。(不強迫,個人喜好命名。)
接著將它extends GuiScreen。
如下。
我懂得,它看起來很可愛,小小der。XD"
接下來我們加入一些我們可能會用到的函式,接著覆寫(Override)它。
別忘了每個要置換的方法上頭要加上@Override,讓系統檢查一次是否正確覆寫。
以免弄到最後,因為大小寫失誤的關係,Debug許久噢!
還有要用super去呼叫父類的方法,不然他們還是不會動作噢!
第一個initGui()函式用於當GUI開啟時的初始化,例如按鈕、標籤的初始化。
第二個drawScreen()函式在GUI開啟的狀態時,每單位時間都會被呼叫,主要用於顯示GUI
主體,請注意,是"每單位時間都會呼叫"!
第三個mouseClicked()函式顧名思義就是在滑鼠被按下的時候,會進行呼叫。
第四個keyTyped()函式在打字的時候會進行呼叫。
第五個actionPerformed()函式在GUI上頭的按鈕被按下的時候會進行呼叫。
第六個doesGuiPauseGame()函式適用在單人遊戲,它會回傳一個布林值(Boolean),來
代表GUI被開啟的時候,是否暫停遊戲。類似單人遊戲中Esc的效果。
以上幾個就是比較常用到,定義在GuiScreen.class檔裡頭的幾個方法,
如果想知道更多的方法,可以上網去查閱API、或者是點進去GuiScreen.class檔看看。
再來,請把有防護衣的勇者們穿上吧。
第2-1節:如何幫GUI先生穿上好看的衣服? 之我們先搞定封包吧。
回歸主旨,有一些人模組所希望的功能不全然相同,
每個人需要GUI開啟的時機點也是不一樣。
在這邊我只簡單的舉個例子,實際的操作、構想,還是依照各位自由。
首先我希望我的GUI可以在玩家登入的時候開啟。
那我們再一次的轉到ClientPacketHandler.class來編輯相關的資訊吧!
上一部份我們僅僅建立的唯一一個封包只能拿來"通知玩家開啟GUI"。
那們這次我們就來完善整個傳接球的機制,讓客戶端看懂如何正確的接球、並且處理。
我們直接從Switch(30)開始講起。
這邊我們接收到封包之後呢,會讀出一個packetID,來辨識這個封包,
由於這邊我們的封包系統僅僅拿來做GUI的資訊傳輸,
所以讀取出來的packetID同時也是GUI ID,那麼在GUI_FIRST的case裏頭,
我們得知了伺服端要求我們開啟編號GUI_FISRT的GUI,
於是系統將接收者(EntityPlayer)做一個openGui()的動作。
openGUI(Object mod, int modGuiID, World world, int x, int y, int z);
第一個參數使用的是我們再Main裏頭(Tutorial.class)註冊的instance、
第二個則是GUI的唯一integer ID、
接著是世界、XYZ座標。
這邊將這個函式註解掉的原因是,
我們還沒有處理好GUIHandler.class,想必大家都已經忘記這貨的存在了。
我們是在客戶端開啟GUI,所以我們要處理的是getClientGuiElement()。
其實這邊也是非常的簡單,
當接收到openGui()的函式的時候,下去判別要初始化哪一個GUI,並且開啟。
在這個例子當中,當然就是我們剛剛建立的GuiFirst()。
由於GuiFirst.class檔裡頭,建構子並沒有要求任何參數,所以我們也無須給予任何參數。
那麼接下來我們就可以測是這個GUI囉!
第2-2節:如何幫GUI先生穿上好看的衣服? 之休息一下,喝杯茶。
睽違了那麼久,終於可以開啟遊戲稍微看一下了嗎?
當然是還沒有。
我們先來簡單的回顧一下到底做了些甚麼事情吧!
建立了一個簡單的封包傳輸系統、還沒有衣服的GUI先生、控制GUI的GuiHandler。
好像少了些甚麼?
我們少了投手。
再次說明:這個GUI開啟的時機是,伺服器請玩家開啟GUI,那麼如果要請伺服器傳輸封包
給客戶端來開啟GUI的話,是不是要發送一個封包呢?
是的,我們截止到現在,都還沒有寫出請伺服器發出封包的程式,事不宜遲,開始動手
吧!
你需要一個玩家登入的事件,這邊我比較偷懶,就先寫進去ProxyServer.class檔案裡頭。
當然不是這樣寫一寫就好囉,
事件要使用之前得先註冊,於是我們還要回到Main檔(Tutorial.class)裏頭去進行註冊。
在第(30、31)行就是我們的事件註冊。
事件有兩種,分別是FMLCommonHandler跟MinecraftForge來處理,因為我嫌麻煩,
所以就乾脆兩個都註冊了。
寫到這邊,先把防護衣脫下來,喝杯茶、上個廁所吧!
第2-3節:如何幫GUI先生穿上好看的衣服? 之再休息一下,看一下成果吧!
弄到這邊,總該可以測試了吧?
好吧,請開啟Debug裏頭的Server還有Client,然後進入127.0.0.1的內部伺服器測試吧!
你會發現很詭異的事情,為什麼滑鼠動不了。
原因是:目前你的GUI開啟開來,甚麼都沒有顯示,所以當然無法移動囉,開著一個透明的
GUI不能動噢!
不過如果你按下Esc關閉那個"透明的GUI",你就可以移動了。
我們總之先加入一點東西吧。不然開啟透明的GUI很詭異。
回到我們的GuiFirst.class檔,然後到drawScreen()方法裡面加上一行。
讓它顯示一個半透明的黑底,最後你會得到:
下一章我們就可以開始幫她穿上衣服囉!
最後:
沒有準備好圖片的趕快去準備啊!(指
感謝各位的收看。
本章有一點小小Java的知識,如果有任何解釋上的錯誤,歡迎留言指正。
老樣子工商請自行查閱Part 01,我們下次再見!