用Go实现Minecraft(一定要看到最后)-创新互联
主题:用 Go 实现 Minecraft
内容:
- 下载编译运行
- 图形库
- 为什么用 go 实现
- 一些例子
- 显示优化
- 持久化
主讲师:饼干
架构师,曾就职腾讯。主要技术方向是高并发以及分布式系统的设计与实现。
成都创新互联主要从事网站建设、
成都网站制作、网页设计、企业做网站、公司建网站等业务。立足成都服务湘潭,十载网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:028-86922220
效果图
项目地址
下载编译运行
安装
go get github.com/icexin/gocraft
运行
cd $GOPATH/src/github.com/icexin/gocraft && gocraft
图形库
- 没有使用引擎,纯手工调用 OpenGL 实现,最小依赖。
- 窗口以及鼠标键盘相关的库使用的是 glfw 实现。
为什么用 go 实现
- 速度快,跟 C++ 一个量级。
- 静态编译,容易分发
- 内置协程,写并发方便。
- 内存模型透明,容易控制gc压力
- 好玩
一些例子1
角色周围的方块是动态生成的,一角色为圆心的辐射区域才会渲染,所以后台有一个检查协程定时补充新的方块。
一些例子2
- gc 的问题在 minecraft 里面动辄就是几十万上百万的方块,这些小对象如果控制不好对 gc 的压力很大,那 gc 的时候就是卡帧的时候。
- go 继承了 C 的思想,区分值和引用,可以合理的控制内存布局。
显示优化
- 按 32*32 聚合 chunk,剔除不会显示的面
- 按视野来渲染,没有看到 chunk 不会渲染
- 一角色为圆心缓存 chunk,转身不会卡顿
- opengl 的面剔除以及深度测试
持久化
- 使用 boltdb 作为存储
- 以chunkid+blockid 作为 key
- 增量存储+实时计算
多人游戏
- 存储部分跟单击一样
- 通信方面使用双向 rpc,使用 yamux+net/rpc 实现
- 服务器主动推送有变化的 block
- 多人的角色渲染使用线性插值来避免卡顿
报名方式
分享时间:18年4月12日(周四)
21:00-22:00
分享方式:网络直播
报名方式:
1、扫码进入分享群,还可参与 GO 课程半价抽奖(2个名额)
创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。
当前名称:用Go实现Minecraft(一定要看到最后)-创新互联
转载来源:
http://dzwzjz.com/article/pcoid.html