日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

代码拾取图片某一点的颜色_RPG游戏开发日志7:道具拾取与存放

發布時間:2023/12/2 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 代码拾取图片某一点的颜色_RPG游戏开发日志7:道具拾取与存放 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本項目同步上傳于github和coding上,國內讀者可以通過在coding下載項目。
也歡迎你加入我的UE4學習交流QQ群:872537977。如果你喜歡我寫的文章,也希望你點贊、收藏、轉發。謝謝!
如果你喜歡我寫的文章,也希望你點贊、收藏、轉發。謝謝!
如果你想參與到這個項目的開發中來,唯一的要求是像我一樣編寫開發日志讓更多的人看到并學習。
github地址:https://github.com/Liweimin0512/uRPG
coding地址:https://git.dev.tencent.com/JeremyBrett/uRPG.git
這一期我們實現道具的拾取和存放

需求分析

上一期中我們設計了一個掉落物的列表。這一期我們繼續處理當列表中的道具被點擊后,將道具保存到玩家的背包中的操作。
我們首先制作一個極簡的背包,它不需要通過主界面的圖標跳轉到專屬的界面。而只是在主界面下方的一排“快捷欄”。因為其實現的原理是一致的。希望小伙伴們能舉一反三吧。
首先,我們依然要客串策劃的工作。策劃同學突然靈光一閃,覺得道具和掉落物應該是一一對應的,而掉落物的參數是可配置的。

DropData與Item的對應關系

通過思考,我們對這部分代碼進行了重構。首先是我們創建了一個DropData的結構體如下圖所示,默認值就設置成之間的掉落物本來該有的值:

s_DropData

這里設置比較簡單,掉落物的模型、特效及拾取半徑都是可以配置的。

然后我們在原有的ItemData中引用這個結構體,如下圖所示:

ItemData中引用

構建Bp_master_DropBase

我們在Bp_master_DropBase中,首先將相關變量都勾選成“可編輯實例”和“在生成時顯示”。并且編寫藍圖的構建腳本如下圖所示:

Bp_master_DropBase的構建腳本

構建腳本,顧名思義就是在藍圖構建時調用的(大概),總之是比BeginPlay事件要早。

當玩家進出凋落物的拾取范圍呢?依然是調用玩家角色身上的UpdateDropItemList方法。

調用UpdateDropItemList


這個方法的實現目前看依然很尷尬,只是做了一個傳話筒,但是我們這么寫的目的是為了搭出架子來,在之后的修改中會更方便。

UpdateDropItemList的實現

Drop函數的重構

再次改寫Drop函數,其實是因為Bp_master_DropBase這個藍圖本身做了調整,它除開存放本身外顯的一些參數外,還存放了一個s_ItemState的結構體變量:

s_ItemState

這個結構體很常用,是保存玩家所擁有的道具及道具數量的簡單結構體。

Drop函數的改變

可以看出Drop函數的改變主要來自于ItemState簡單了許多,只需要傳入道具Id和數量即可。而Drop相關的參數,也是通過查詢ItemList表格獲取到的。

UMG_PickupList的處理

UMG_PickupList主要是UpdateListView這個函數的實現,這也是目前比較關鍵的一步。首先,我們根據Add?判斷是添加還是移除元素從ItemStatList這個集合中,同時對PickupListView進行一次清理操作

ItemStatList操作

然后我們遍歷ItemStatList中的元素,逐個添加到PickupListView中

添加操作

由于這部分都是對上一期中代碼的重構,因此不詳細介紹思路了就。

UMG_ItemInventory

上文的內容,都是對過往代碼的重構,從這里開始,才進入本篇文章的主題。首先,我們創建一個主界面控件——快捷欄控件。它長這樣:

UMG_ItemInventory的設計

如果你細心觀察,會發現其實這個Weiget只使用了一個HorizontalBox組件,如何實現?這就要引出PreConstruct這個事件了,他有點類似于藍圖的構造腳本。在編輯器中就可以展現事件中所進行的修改。我這里進行的修改很簡單

PreConstruct

創建了10個UMG_Item并將其添加到HorizontalBox組件上,同時,為了進行邏輯上的記錄,還將其保存在一個名為ItemIndex的map中

ItemIndex


至于UMG_Item這個Weiget呢,相信你已經猜出來了。

UMG_Item

它由背景圖片,道具圖片和道具數量三部分組成,并且默認情況下(沒有道具時)道具圖標、道具數量都是隱藏的,只顯示背景圖片。(ps:寫到這里突然感覺實現方式有問題,懶得改了,下期再說)

OnItemClicked事件

ListView很重要的一個事件,就是當列表中的某一項被點擊時候調用的OnItemClicked事件。我們這里要用這個事件,當點擊時,將掉落物添加到背包中并從拾取物列表中移除。

OnItemClicked

這里我們并沒有直接處理,而是將操作權交給了Controller。不過,還是將干掉掉落物的操作直接在這里實現了。(似乎也是不合理的部分,之后優化吧。)

那么Controller怎么操作的呢?他首先通知Character做相應的操作(SetItemValue),然后通知主界面做相應操作(UpdateItemInventory)

F_Pickup

而UpdateItemInventory顧名思義,就是更新一下背包。這個函數可以再每次打開背包的時候調用,這里因為是直接顯示在快捷欄中,因此當撿起道具時候就應該直接顯式調用一次。

UpdateItemInventory

首先就是遍歷ItemMap,然后根據其中存儲的ItemID通過查表將道具圖標和數量顯示出來,需要注意的是,圖標和數量的控件默認都是隱藏的,這里需要將其設置為顯示的。

至此,將道具存放到背包中的功能就算是完成了。

下期預告

在之后的一段時間,我想研究一下任務系統的實現。至于道具系統更深入的開發,就留給任務系統之后來做。
或者說是制作一個簡易的任務系統,然后補充這些基礎系統的文檔后。再重構更為精巧的技能、任務和道具系統。

總結

以上是生活随笔為你收集整理的代码拾取图片某一点的颜色_RPG游戏开发日志7:道具拾取与存放的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。