当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)

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

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Coding迪斯尼

生成型对抗性网络的基本定义和介绍:什么叫生成

自从电脑诞生后,人类就有一个梦想,让它像人类一样思考。随着人工智能技术的飞速发展,计算机的思考能力突飞猛进,在很多方面已经通过了所谓的“图灵测试”。特别是在深度...

7850
来自专栏原创

搞定iOS推送,看这一篇就够了 顶

一次偶然的机会,公司的项目要用到推送,我自己本来就很懒,不愿意去弄整套APNS的流程,刚好之前跟朋友聊起过他们的产品中集成了个推的Android推送,说是体验还...

14140
来自专栏前端一会

怎么用css属性屏蔽鼠标事件(鼠标点击可穿透上层元素)

看到这个需求,我有点懵逼。现在的情况是只有点击日期内容框空白区域时,才会响应点击事件显示下拉日期菜单。

10120
来自专栏iOS小生活

Flutter 的按钮,看这篇文章就够了

我在之前的文章文本、图片和按钮在Flutter中怎么用中,简单介绍过按钮组件,本篇文章来详细聊聊Flutter中的各种按钮组件的各种应用场景。

1.5K30
来自专栏VRPinea

8.27 VR扫描:京东、高通、KSI投资奥本未来;惠普修复Reverb VR屏幕问题重新发售

近日,恒信东方发布公告:预计向不超过5名符合条件的特定投资者,非公开发行股票不超过1.06亿股,募集资金总额不超过10亿人民币。据悉,该项目募集资金将用于VR开...

11850
来自专栏vue的实战

vue3.0 高仿饿了么项目(项目初始化)

3.iPhone6 Plus分辨率414x736,像素1242x2208,@3x,(注意,在这个分辨率下渲染后,图像等比降低pixel分辨率至1080p(108...

13230
来自专栏阿策小和尚

【Flutter 专题】58 图解 Flutter 嵌入原生 AndroidView 小尝试

和尚前段时间学习了一下 Flutter 与原生 Android 之间的交互;是以 Android 为主工程,Flutter 作为 Module 方式...

14420
来自专栏前端讲堂

带领前端小伙伴重温「Git Flow Workflow」

关于Git Flow 工作流,我想已经是老生常谈的话题了,但是今天我不得不来重温一下 Git Flow 工作流。当我看的代码厂库的时候,我已经开始怀疑人生。乱七...

8250
来自专栏业余草

Netty系列之Netty线程模型

最近发现极客时间的很多课程中,都穿插到了 Netty,可见 Netty 的重要性。基于此,给大家推荐一下这篇文章!

7230
来自专栏Flutter笔记

Flutter | 通过一个小例子带你认识动画 Animation

首先,我们知道在我们的APP中充斥着各种各样的动画,有的是用 GIF,有的用的 Flare,有的是用的 Lottie...。

18930

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励