为了账号安全,请及时绑定邮箱和手机立即绑定

用Go 实现 Minecraft(一定要看到最后)

标签:
Go

主题:用 Go 实现 Minecraft

内容:

下载编译运行

图形库

为什么用 go 实现

一些例子

显示优化

持久化

主讲师:饼干

架构师,曾就职腾讯。主要技术方向是高并发以及分布式系统的设计与实现。

效果图

用Go 实现 Minecraft(一定要看到最后)

用Go 实现 Minecraft(一定要看到最后)

项目地址

下载编译运行

安装

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个名额)

用Go 实现 Minecraft(一定要看到最后)

©著作权归作者所有:来自51CTO博客作者xjtuhit的原创作品,如需转载,请注明出处,否则将追究法律责任

golangMinecraft看到最后Golang学习


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消