MMORPG网络游戏开发之Protobuf的基本使用
MMO游戏又称大型多人在线角色扮演类游戏,在所有的角色扮演的游戏当中,玩家都要扮演一个虚拟角色,并控制角色活动
MMO可以分为客户端和服务器两部分,玩家通过客户端连接到互联网登录服务器才能进行游戏,游戏玩家的数据资料保存在服务器上,游戏的开发商和运营商提供游戏的服务器以及管理虚拟世界,对游戏不断的做出更新以便留住老玩家以及吸引新玩家
今天就为大家介绍MMORPG游戏中的Protobuf的基本使用
本篇文章涉及到的源码及素材资源,还有更多游戏开发资源,可以通过点击下方链接免费获取
从零开发MMO 3天训练营【第一期】 (qq.com)
安装Protobuf
- 首先在VisualStudio里创建一个Protobuf项目,右击这个项目下的依赖项选择管理NuGet程序包
- 搜索Protobuf-net,然后选择第一个进行安装
Protobuf的使用
- Protobuf的使用很其实简单,只要在你的类前面加上[ProtoContract],然后在每一个字段上面加上[ProtoNember]就可以了,如下图所示
- ProtoNember的作用是在序列化协议数据时为它下方的字段提供一个编号,也就是上图中ProtoNember后面括号中的数字,用来表明字段在序列化后的数据中的位置,如果编号是1,那么就表示占据整个数据包的最前面的位置
- 举个例子:
- 上图中的Person类有三个字段,当我们序列化Person数据时,Id字段一定是处于序列化最前面的,name字段处于第二位,Address则位于最后
- 这样Protobuf在解析数据时,它就能知道最先解析的数据是什么,为什么Protobuf需要有这样的编号呢?
- 如果使用JOSN来序列化数据那么它序列化出来的数据的格式就如下图所示
- 因为JSON序列化后的数据写入了字段名,所以它在反序列化时就可以根据字段名来获取这个字段对应的值,然后再反序列化到我们要创建的Person对象里
- 所谓的序列化就是把一个Person对象转成字符串,就如上图所示,反序列化就是把这个字符串转换成Person对象,JSON在反序列化时会根据写入的字段名获取对应的值,然后将这些数值填入到新创建的Person对象的id字段,name字段,Address字段中
- 但是由于Protobuf为了节省数据传递的开销,它不会传递这些字段名,所以需要指定编号,这样Protobuf才能知道第一个数据项解析的数据是什么?第二个数据项是什么?第三个数据项解析的又是什么?
- 以上是关于Protobuf的基本使用,那么怎样序列化数据呢?就是用下面这段代码
- 这段代码会使用Serializer.Serialize方法将上面创建的Person对象序列化到一个文件里
- Protobuf的反序列化是相反的逆过程,反序列化会调用Serializer.Deserialize方法把一个文件的数据导入到程序里面
- Protobuf的使用很简单,只要记住Serializer类,和它的序列化、反序列化方法就够了,一个类,当你写Protobuf协议时,就按照这样的形式去写就可以了
Protobuf的高级用法
- Protobuf是可以跨语言的,也就是说我可以用Protobuf的专用语法去写网络协议,然后用Protogen生成工具从Protobuf文件里生成C#的代码
Protobuf的基本使用就到这里就结束了,感谢各位读者能够看到这里,如果想要学习如何在项目中使用Protobuf可以参加我们的从零开发MMORPG 3天训练营,原价298,现在限时免费领取
从零开发MMO 3天训练营【第一期】 (qq.com)
课程大纲如下
学完你能够收获
连续3天,360+分钟
不仅仅能让你从零开发MMORPG,更能让你了解游戏行业求职所面临最重要的问题!
让你在入行前避过这些坑
快点击下方立刻免费参加本次训练营吧!
从零开发MMO 3天训练营【第一期】 (qq.com)
MMORPG网络游戏开发之Protobuf的基本使用相关推荐
- JAVA游戏开发之FPS精准控制
目录 JAVA游戏开发之FPS精准控制... 1 1 概述... 2 1.1 编写目的... 3 2 FPS精准控制... 3 2.1 FPS描述. ...
- 镜像处理坐标 android,Android应用开发之Android重写ImageView实现图片镜像效果的代码教程...
本文将带你了解Android应用开发之Android重写ImageView实现图片镜像效果的代码教程,希望本文对大家学Android有所帮助. 前两天朋友问我一个问题,如何实现从手机系统相册加载一张图 ...
- iOS开发之AVKit框架使用
2019独角兽企业重金招聘Python工程师标准>>> iOS开发之AVKit框架使用 一.引言 在iOS开发框架中,AVKit是一个非常上层,偏应用的框架,它是基于AVFounda ...
- Android NDK开发之旅31 FFmpeg音频解码
###前言 #####基于Android NDK开发之旅30--FFmpeg视频播放这篇文章,我们已经学会视频解码基本过程.这篇文章就对音频解码进行分析. #####音频解码和视频解码的套路基本是一样 ...
- android 监听物理返回键,Android应用开发之react-native 监听Android物理返回键
本文将带你了解Android应用开发之react-native 监听Android物理返回键,希望本文对大家学Android有所帮助. 1. componentWillMount(){ ...
- android开发之Intent.setFlags()_让Android点击通知栏信息后返回正在运行的程序
android开发之Intent.setFlags()_让Android点击通知栏信息后返回正在运行的程序 在应用里使用了后台服务,并且在通知栏推送了消息,希望点击这个消息回到activity, ...
- 谷歌的AI应用开发之道
https://www.toutiao.com/a6718151019873698308/ 全球AI第一大厂,打造AI产品时有何指导思想? 软件+硬件+AI. 没错,这是谷歌CEO皮猜在Google ...
- WinForm界面开发之“HTML内容编辑控件”
做过了很多Winform的共享软件,对界面的设计有了一定的经验和积累,准备开一个"WinForm界面开发"系列文章,介绍下相关的Winform界面设计和相关控件的使用,促进相互交流 ...
- python运维开发之socket网络编程01
python运维开发之socket网络编程01说明:本文来自来自北京老男孩linux运维实战培训中心-运维开发课程免费视频内容,本文内容为系列内容,更多分享信息见:http://oldboy.blog ...
最新文章
- Lispbox的简单配置
- 斐波拉契数列python123_python计算机二级题目分类汇总
- 共享内存查看清除命令ipcs和ipcrm
- 动态改变eachers图表高_让你的Excel图表动起来
- ESP8266使用方法
- 20145303 《信息安全系统设计基础》第7周学习总结(2)
- C语言常用字符串函数strlen、strcpy、strcat、strcmp、strchr
- VB ListBox 添加不重复的值
- 怎么给iOS项目打包
- 不透水面提取操作实现
- 路由器玩机---老毛子设置AP与主路由设置
- 视频横竖屏模式切换,如何将多个视频任意转换
- 天数计算(某日(时间戳)到今天的天数、两个日期相差的天数)
- 深空天体反差指数计算
- 班级网页制作 HTML个人网页设计 我的班级网站设计与实现 大学生简单班级静态HTML网页设计作品 DIV布局班级网页模板代码 DW学生校园网站制作成品下载
- shell计算命令:let命令详解
- 自动驾驶货运编队行驶介绍
- python爬虫论文参考文献格式_Python爬虫进阶必备 | XX文学加密分析实例
- 通过mqtt再利用移动oneNet平台的连接与数据收发
- sql server 2008 r2服务器无法启动,怎么办
热门文章
- 【c++】——函数的堆栈调用详细过程
- javaEE---CSS
- TNS-12535,TNS-00505,ORA-3136报错信息处理
- Exeinfo PE查壳工具
- 阿里云数据库(RDS)查看空间使用情况
- java 建立临时文件夹
- 经典 CNN 神经网络 LeNet-5 的 C++ 实现(MNIST数据集)
- 只能写作文?那必须安排一条龙服务[ChatGPT的应用场景初探]
- 微信小程序开发-微信支付功能【WxMaService 获取openid,WxPayService建微信订单,接收微信支付异步通知回调方法,附有完整前后端代码】
- twitter视频下载php,Twitter推特红心点赞H5动画按钮特效