主題:用 Go 實(shí)現(xiàn) Minecraft
內(nèi)容:
- 下載編譯運(yùn)行
- 圖形庫
- 為什么用 go 實(shí)現(xiàn)
- 一些例子
- 顯示優(yōu)化
- 持久化
主講師:餅干
架構(gòu)師,曾就職騰訊。主要技術(shù)方向是高并發(fā)以及分布式系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)。
創(chuàng)新互聯(lián)建站主要從事成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)五常,十載網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):13518219792
效果圖
項(xiàng)目地址
下載編譯運(yùn)行
安裝
go get github.com/icexin/gocraft
運(yùn)行
cd $GOPATH/src/github.com/icexin/gocraft && gocraft
圖形庫
- 沒有使用引擎,純手工調(diào)用 OpenGL 實(shí)現(xiàn),最小依賴。
- 窗口以及鼠標(biāo)鍵盤相關(guān)的庫使用的是 glfw 實(shí)現(xiàn)。
為什么用 go 實(shí)現(xiàn)
- 速度快,跟 C++ 一個量級。
- 靜態(tài)編譯,容易分發(fā)
- 內(nèi)置協(xié)程,寫并發(fā)方便。
- 內(nèi)存模型透明,容易控制gc壓力
- 好玩
一些例子1
角色周圍的方塊是動態(tài)生成的,一角色為圓心的輻射區(qū)域才會渲染,所以后臺有一個檢查協(xié)程定時補(bǔ)充新的方塊。
一些例子2
- gc 的問題在 minecraft 里面動輒就是幾十萬上百萬的方塊,這些小對象如果控制不好對 gc 的壓力很大,那 gc 的時候就是卡幀的時候。
- go 繼承了 C 的思想,區(qū)分值和引用,可以合理的控制內(nèi)存布局。
顯示優(yōu)化
- 按 32*32 聚合 chunk,剔除不會顯示的面
- 按視野來渲染,沒有看到 chunk 不會渲染
- 一角色為圓心緩存 chunk,轉(zhuǎn)身不會卡頓
- opengl 的面剔除以及深度測試
持久化
- 使用 boltdb 作為存儲
- 以chunkid+blockid 作為 key
- 增量存儲+實(shí)時計(jì)算
多人游戲
- 存儲部分跟單擊一樣
- 通信方面使用雙向 rpc,使用 yamux+net/rpc 實(shí)現(xiàn)
- 服務(wù)器主動推送有變化的 block
- 多人的角色渲染使用線性插值來避免卡頓
報(bào)名方式
分享時間:18年4月12日(周四)
21:00-22:00
分享方式:網(wǎng)絡(luò)直播
報(bào)名方式:
1、掃碼進(jìn)入分享群,還可參與 GO 課程半價(jià)抽獎(2個名額)
分享題目:用Go實(shí)現(xiàn)Minecraft(一定要看到最后)
本文網(wǎng)址:
http://weahome.cn/article/jcgdsg.html