最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

BlockOS開發(fā)日志(六)區(qū)塊加載

2023-04-22 19:42 作者:Zerous  | 我要投稿

抱歉,這段時間沒空寫實現(xiàn)的總結(jié)型日志了。實現(xiàn)相關(guān)的文章后面有空的時候再來補。

對于加載、卸載的需求

只有當玩家的區(qū)塊坐標出現(xiàn)變化時,才會觸發(fā)區(qū)塊加、卸載。因此應該需要一個區(qū)塊管理器,每次更新檢查玩家的區(qū)塊坐標,然后在變動時,計算出“需要激活的區(qū)塊”列表。

接著客戶端需要讓“需要激活的區(qū)塊”列表與“當前激活的區(qū)塊”列表取補集,這個補集即需要加載的新區(qū)塊;讓“當前激活的區(qū)塊”列表與“需要激活的區(qū)塊”列表取補集,這個補集即需要卸載的舊區(qū)塊。

對于需要加載的新區(qū)塊,應該把它們做成請求列表然后發(fā)給服務器。對于要卸載的舊區(qū)塊,應該可以直接拋棄。

最后,需要一個重傳機制。每隔一段時間,就讓“需要激活的區(qū)塊”列表與“當前激活的區(qū)塊”列表取一次補集,只要補集不為空,就再次發(fā)送這個補集的請求列表。

相對獨立地,區(qū)塊管理器應該監(jiān)聽“區(qū)塊加載”事件,如果事件中的新區(qū)塊在“需要激活的區(qū)塊”列表內(nèi),那么就取出區(qū)塊信息,然后讓一個空閑的區(qū)塊對象使用這個區(qū)塊信息進行渲染。

需求分析

先看一下整個過程涉及到了哪幾個實體。首先區(qū)塊管理器是肯定的。然后是區(qū)塊管理器管理的區(qū)塊對象。最后是一個用于和服務器通信的代理。這個通信代理可以改造成一個接口,有一個RequestChunks()方法,用于提交加載區(qū)塊請求,一個OnChunkLoad委托,用于分發(fā)加載事件。排列一下,這塊也就三個實體:

  • 區(qū)塊管理器 ChunkManager

  • 區(qū)塊對象 Chunk

  • 通信代理 IChunkStorage

為了實現(xiàn)不頻繁創(chuàng)建、銷毀區(qū)塊對象,需要為區(qū)塊管理器設計兩個容器。一個是“激活的區(qū)塊”列表。一個是“未激活的區(qū)塊”列表,舊區(qū)塊被卸載時,其區(qū)塊對象就會被放入這個列表,它只要能存取就行,就做成隊列吧。

然后區(qū)塊管理器需要一個更新方法,在這個方法以玩家當前位置為參數(shù)。為了判斷玩家的區(qū)塊坐標出現(xiàn)了“變動”,因此區(qū)塊管理器需要緩存玩家上次的區(qū)塊坐標,如果不同,才觸發(fā)計算“需要加載的區(qū)塊”列表的過程。這個過程中計算出兩個補集。當這兩個補集存儲的內(nèi)容不為空時,就會做出相應的請求、回收操作。

所以區(qū)塊管理器需要哪些字段呢?應該需要四個:

  1. 用于存儲“需要加載的區(qū)塊”集合與“當前加載的區(qū)塊”集合之間補集的隊列requestedChunks

  2. 用于存儲“當前加載的區(qū)塊”集合與“需要加載的區(qū)塊”集合之間補集的隊列g(shù)arbageChunks

  3. 用于存儲“當前加載的區(qū)塊”的字典chunks

  4. 用于存儲被回收的區(qū)塊的隊列inactivatedChunks

好像輪廓已經(jīng)很清晰了。那么就開干吧。


BlockOS開發(fā)日志(六)區(qū)塊加載的評論 (共 條)

分享到微博請遵守國家法律
色达县| 信阳市| 无极县| 镇雄县| 宁陕县| 云龙县| 西和县| 鄂托克旗| 高雄县| 绍兴市| 定南县| 南漳县| 云安县| 镇雄县| 油尖旺区| 竹溪县| 天峨县| 营口市| 仪征市| 海淀区| 策勒县| 岳池县| 汾西县| 大兴区| 仁怀市| 蒙阴县| 湄潭县| 富阳市| 黔西县| 宁海县| 根河市| 苏尼特右旗| 新乡市| 临潭县| 金山区| 镇雄县| 阿拉善左旗| 扬中市| 库车县| 阳春市| 高陵县|