专栏首页Creator星球游戏开发社区当creator遇上protobufjs—叛逆

当creator遇上protobufjs—叛逆

我们之前讲过要在Creator原生环境下使用protobufjs,使用伪装者的方式模拟nodejs的fs和path模块可以完美解决问题。 但随着creator1.7的到来,Shawn也尝了下鲜,但发现在Creator模拟器环境下,原来的伪装方案失效了。

一、疑犯追踪

追踪这个问题,不得不称赞下Creator1.7提供的新的底层引擎,在调试上ios/mac平台使用safari,android/windows使用chrome。

在模拟器上调试require函数中找到一些线索

上图中,从已经加载的模块文件中没有找fs模块,心拔凉拔凉的,继续追查原因。

注意fs的值为2

在数组中2号元素的文件名为empty.js,并不是我们的fs文件,找到原因了。

从上面调试看出,Creator模拟器将fs\path模块认为是nodejs模块,没有按普通模块进行加载。

二、一波三折

伪装的fs\path模块只是不能在Creator1.7的模拟器上运行,在浏览器、自编译的MacApp、ios、android上都能正常运行。但Creator模拟器是平时开发调试的利器,不能运行protobufjs会影响日常的开发效率,也会影响pbkiller的用户,决对不能马虎了事。

1. 明灯

发现问题的第一时间,火速向Creator引擎组的大大汇报了此问题,Jare建议使用cc.loader.loadRes函数抹平不同平台上的文件加载问题,当时眼前一亮,猛拍一下自己的脑袋,我以前怎么没想到这个办法? 不论是web\ios\android所有平台的文件加载都可以用cc.loader.loadRes搞定,比protobufjs中实现的fetch都简单多了,cc.loader.loadRes为我提供了一盏明灯。

2. 熄灭

马上开始动手,刚一动手时,就想到决对不能修改protobufjs的源码,因为有些人是用npm来管理的protobufjs,不能让pbkiller的用户去修改node_moduls吧,这样太low了! 脑子飞快地运转起来,一束光在一片神经网络的触突上闪耀,电光石火的一瞬间,找到了一个方案:动态修改函数

let protobuf = require('protobufjs');
protobuf.Util.fetch = function myfetch(path, callbcak) {
   cc.loader.loadRes(path, (error, data) => {
       if (!error) {
          callback(data);    
       }
   )  
};

正在得意之时,突然之间脑子里翁的一声,有问题?如果这样去实现protobufjs的fetch函数,只能是异步加载,而我之前提供的pbkiller的演示范例全是同步方式,决对不能这样坑了pbkiller的用户呀。

“哎呦!好痛,那个打我” “你看下好多时间了,还不睡觉,明天要上班哈!” “谢谢老婆关心,马上去睡觉”

3. 曙光

不好意思,明天继续


本文分享自微信公众号 - Creator星球游戏开发社区(creator-star),作者:ShawnZhang

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-10-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 豁出去了,就算不会服务器,我也要开发一个联机坦克大战

    最近在用腾讯的小游戏联机对战引擎(以下简称MGOBE)改写我之前写的坦克大战,这里是源码仓库:https://gitee.com/starry_skys/tan...

    张晓衡
  • GitChat即将出炉,内容提前预告!

    Shawn前段时间一时心血来潮想尝试一下GitChat,话题是《Cocos Creator 集合类游戏模块化与热更新实践》。

    张晓衡
  • 当creator遇上protobufjs—叛逆成长

    我们之前讲过要在Creator原生环境下使用protobufjs,使用伪装者的方式模拟nodejs的fs\path模块可以完美解决问题。但随着Creator1....

    张晓衡
  • Nginx系列教程(7)nginx rewrite配置规则详细说明

    注:nginx官方文档:http://nginx.org/en/docs/http/ngx_http_rewrite_module.html

    haikangweishi
  • 那个曾经黑掉iPhone和PS3的少年,要把你的车破解成无人车

    陈桦 问耕 发自LZYY 量子位 出品 | 公众号 QbitAI 你知道霍兹(George Hotz)么? 今天是他28岁生日。十年前,霍兹耗时500多个小时,...

    量子位
  • 梁老师小课堂|谈谈模板方法模式

    众多设计模式中,我觉得模板方法模式是很好理解,也很值得深入研究的技巧。定义如下,在一个包含多个步骤的业务框架中,大部分步骤是固定不变,并且适用于多种业务场景,可...

    公众号_松华说
  • 微信小程序如何修改小程序名称

    你可用修改 app.json 中的 navigationBarTitleText": “云开发 QuickStart”, 字段。

    HoneyMoose
  • 如何免费下载信息安全行业标准?

    信息安全行业标准、规范众多,而且不断的与时俱进。标准管理、制定部门也众多,另外不同产品、行业要求也不一致。不光有国际标准、国家标准、行业标准、团体标准、企业标准...

    安智客
  • Webpack 概念

    概念 webpack 是一个现代的 JavaScript 应用程序的模块打包器(module bundler)。当 webpack 处理应用程序时,它会递归地构...

    静默虚空
  • 在线生成二维码的API接口

    阿炬

扫码关注云+社区

领取腾讯云代金券