Win7 + Creator 2.0.0 + protobufjs 6.8.8

1.下载安装protobufjs

npm install -g protobufjs

可以看到protobufjs安装在C:\Users\Administrator\AppData\Roaming\npm\node_modules\protobufjs中

2.在protobufjs\dist中找到protobuf.js文件,并作为插件拖放到Creator中(注意,必须作为插件,并且是四个选项都必须选中,否则将报错!)

3.新建一个通讯协议文件msg.proto,内容如下

syntax = "proto3";

package msg;

message Login {
string name = ;
string pwd = ;
}

注意:package为包名msg

4.使用如下命令将msg.proto文件转为对应的js版本文件Msg.js

::protobuf.js版本6.x生成js文件
pbjs -t static-module -w commonjs -o Msg.js msg.proto

5.修改Msg.js文件对应内容

//var $protobuf = require("protobufjs/minimal"); //将源文件中的这一行屏蔽,然后新增下面一行
var $protobuf = protobuf;

6.将Msg.js拖放到Creator中(包含Msg.js和protobuf.js文件的结构如下)

7.写一个WebSocket的处理脚本挂载到场景中即可。

import {msg} from "./Msg"  //这里引入文件,msg为package的包名

cc.Class({
extends: cc.Component, properties: {
ip: {
default: "",
type: cc.string
}, port: {
default: 0,
type: cc.number
}
}, ctor: function () {
this.ws = null;
}, onLoad: function () {
var self = this; var ipPort = "ws://" + this.ip + ":" + this.port;
console.log(ipPort); this.ws = new WebSocket(ipPort);
this.ws.binaryType = 'arraybuffer'; //这里设置为发送二进制数据 this.ws.onopen = function (event) {
console.log("open"); //打开成功立刻进行发送
if (self.ws.readyState === WebSocket.OPEN) {
let message = msg.Login.create({name: "hello", pwd: "pwd"});//构造对象
let messageBuf = msg.Login.encode(message).finish(); //获取二进制数据,一定要注意使用finish函数 self.ws.send(messageBuf); //发送二进制数据
}
}; this.ws.onmessage = function (event) {
console.log("onmessage : " + event.data);
}; this.ws.onerror = function (event) {
console.log("on error :", event.data);
}; this.ws.onclose = function (event) {
console.log("onclose");
};
}
});

PS:在实际应用中,可能需要在二进制数据前再拼接一些数据才进行发送

8.在二进制数据前再拼接一个short数据

              let message = msg.Login.create({name: "hello", pwd: "pwd"});
let msgEncode = msg.Login.encode(message).finish(); //一定要注意使用finish函数 //二进制数据的长度+一个short的长度
var sendBuf = new ArrayBuffer(msgEncode.length + 2); var dv = new DataView(sendBuf);
dv.setInt16(0,1); //写入一个short值 //将二进制数据写入
var u8view = new Uint8Array(sendBuf, 2); //跳过一个short的距离
for (var i = 0, strLen = msgEncode.length; i < strLen; ++i){
u8view[i] = msgEncode[i];
} self.ws.send(sendBuf);

9.使用JAVA的WebSocketServer接口,很方便就可以接收并处理数据

    @Override
public void onMessage(WebSocket conn, ByteBuffer message) {
try {
short val = message.getShort(); //获取short值
Msg.Login login = Msg.Login.parseFrom(message);
Log.info("val = %d name : %s pwd : %s", val, login.getName(), login.getPwd());
} catch (InvalidProtocolBufferException e) {
e.printStackTrace();
}
}

输出结果

参考传送:《cocosCreator中Protobuf的简单使用

以上。

Cocos Creator 使用protobufjs的更多相关文章

  1. 在 Cocos Creator 中使用 Protobufjs(一)

    一. 环境准备 我一直在探索Cocos H5正确的开发姿势,目前做javascript项目已经离不开 nodejs.npm或grunt等脚手架工具了. 1.初始化package.json文件 npm ...

  2. 触控的手牌—Cocos Creator

    科普 Cocos Creator是触控最新一代游戏工具链的名称.如果不太清楚的,可以先看一些新闻.   新编辑器Cocos Creator发布: 对不起我来晚了! http://ol.tgbus.co ...

  3. kbengine_js_plugins 在Cocos Creator中适配

    kbengine_js_plugins 改动(2017/7/6) 由于Cocos Creator使用严格模式的js,而原本的kbengine_js_plugins是非严格模式的,因此为了兼容和方 便C ...

  4. cocos creator实现棋牌游戏滑动选牌的功能

    最近在玩cocos creator,打算学着做一款类似双扣游戏的棋牌,名字叫文成三星,比双扣还要多一扣,因为需要三幅牌,在我们老家比较流行这种玩法. 目前实现了绝大部分的逻辑效果如下: 有一点不好的体 ...

  5. Cocos Creator—最佳构建部署实践

    这篇文章主要是我们团队在使用Cocos Creator过程中的一些关于部署方面的实践总结,标题党了一回,严格来说,应该是<快看漫画游戏研发团队使用Cocos Creator构建部署最佳实践> ...

  6. Cocos Creator—定制H5游戏首页loading界面

    Cocos Creator从1.0版本发布到现在也有一年多了,按理说一些常见的问题网上都有解决方案,例如"如何自定义首页加载进度条界面"这种普遍需求,应该所有人都会遇到的,因此也有 ...

  7. Cocos Creator—优化首页打开速度

    Cocos Creator是一个优秀的游戏引擎开发工具,很多地方都针对H5游戏做了专门的优化,这是我比较喜欢Cocos Creator的一点原因. 其中一个优化点是首页的加载速度,开发组为了加快首页的 ...

  8. Cocos Creator—如何给资源打MD5版本号

    Cocos Creator 是Cocos最新一代的游戏开发者工具,基于 Cocos2d-x,组件化,脚本化,数据驱动,跨平台发布.Cocos Creator的开发思路已经逐步跟Unity 3D靠拢,写 ...

  9. Cocos Creator 资源加载流程剖析【一】——cc.loader与加载管线

    这系列文章会对Cocos Creator的资源加载和管理进行深入的剖析.主要包含以下内容: cc.loader与加载管线 Download部分 Load部分 额外流程(MD5 Pipe) 从编辑器到运 ...

随机推荐

  1. phpredis Redis集群 Redis Cluster

    官方url: https://github.com/phpredis/phpredis/blob/develop/cluster.markdown#readme 2017年10月29日20:44:25 ...

  2. Codeforces 1100 - A/B/C/D/E/F - (Undone)

    链接:https://codeforces.com/contest/1100 A - Roman and Browser - [暴力枚举] 题意:浏览器有 $n$ 个网页,编号 $1 \sim n$, ...

  3. 如何查看.net framework 版本

    以windows 2016 standard版本为例 通过注册表查看,找到 .NET Framework 注册表信息所在的位置:HKEY_LOCAL_MACHINE\SOFTWARE\Microsof ...

  4. Bom 字符串的问题

    不含 BOM 的 UTF-8 才是标准形式",的确是这样,无BOM使用得更多些,所以个人还是推荐一般情况下用无BOM的形式吧,除非有问题的时候,再考虑换有BOM的.Windows系统保存的都 ...

  5. poj3278

    #include<iostream> #define MAX 100001 int john,cow; int queue[MAX]; int vis[MAX]; int ans; voi ...

  6. 15.4-uC/OS-III资源管理(二值信号量)

    互斥信号量是 uC/OS 操作系统的一个内核对象, 与多值信号量非常相似,但它是二值的,只能是 0 或 1,所以也叫二值信号量, 主要用于保护资源. 1.如果想要使用互斥信号量,就必须事先使能互斥信号 ...

  7. Keras序列模型学习

    转自:https://keras.io/zh/getting-started/sequential-model-guide/ 1.顺序模型是多个网络层的线性堆叠. 你可以通过将网络层实例的列表传递给  ...

  8. ignore_user_abort(true); set_time_limit(0);程序在本地测试可以一直运行,上传服务器只能运行10-15分钟

    当PHP运行在安全模式下时此函数无效.除了关闭安全模式或者在php.ini程序中修改最大运行时间没有其他办法让此函数运行. php.ini 中缺省的最长执行时间是 30 秒,这是由 php.ini 中 ...

  9. android studio java: -source 1.6 中不支持 switch 中存在字符串 的错误

    F4打开open moudle setting 将source Compatibility 改为1.7 F4打开open moudle setting 将targetCompatibility 改为1 ...

  10. nginx----------linux下nginx环境搭建遇到的一些问题汇总(多域名配置,配置文件修改问题)

    一.启动 cd usr/local/nginx/sbin ./nginx 二.重启 更改配置重启nginx kill -HUP 主进程号或进程号文件路径 或者使用 cd /usr/local/ngin ...