今天周未,Shawn将之前在Cocos论坛中回答的问题,整理了部分继续我的分享之路!

1. 既然有这么流畅的Cocos界面,为什么应用使用它来做H5界面

问:既然有这么流畅的Cocos界面。为什么应用使用RN来做界面,这是为什么呢?我觉得所有的Web界面都应该用Cocoas 来替换啊。

答:使用游戏引擎APP也是可以的,我想到有几个问题
1. 游戏引擎制作UI成本较高,HTML+CSS+JS开发UI效率和成本最优的。
2. 游戏引擎的界面渲染机制不同(opengl),它比系统原生的渲染消耗更多电池电量。
3. 游戏界面其实是在普通app应用上的一个opengl窗口,为了跨平台使用了c++、js等语言,要调用原生设备的能力还需要在不同语言中桥接,既要会游戏引擎,又要会原生开发,人力成本也高

反馈:获得楼主的赞

2. CocosCreator怎么引入外部库?

问:怎么引入外部库,我引用了一个socket的库,在新手入门提到的socket已经过期了,无法下载,现在我能在浏览器里面预览,但无法打包发布
还有怎么改端口和服务器连接测试

  • 方案1:将三方库放入assets,在需要使用的地方使用requre引入

  • 方案2:将三方库放入assets,选中js代码文件,在属性编辑器上勾选“导入为插件”,大多三方库导入的模块为全局变量,类似你在index.html中导入

  • 方案3:在工程目录下创建一个build-templates目录,对应build工程目录结构,构建时将三方库复制到构建工程中,创建自己的index.html模板,但是在调试时对三方库的使是会报错的。强烈不推介这种方式。

  • 方案4:可以使用npm管理三方库,代码中使用requre引入,但官方不推介使用npm,会有冗余代码在项目中,这个有点不爽。

3. creator中,如何给一个预制体中的按钮添加一个点击事件?

问:我制作了一个预制资源,这个预制资源中有一个按钮。当我在layout节点下面生成这个预制体后,如何给他上面的按钮添加一个点击事件,弹出一个提示框?在生成的时候我给他添加了一个标签,所以可以根据这个 标签拿到这个按钮,但是怎么给他添加点击事件?我用了this.button.node.on(),但是这个好像只能在onLoad中使用,在生产预制资源的方法中使用会报 “on”没有被定义的错。各位大神帮帮忙!

答:可以在实例化prefab时,用代码创建事件监听

let node = cc.instantiate(prefab);
this.layout.addChild(node);
node.on(cc.Node.EventType.TOUCH_END,  (touchEvent) => {cc.log('点击事件在此');
})

反馈:根据您的方法成功了,谢谢了。

4、如何获取resources里的某个文件的真实安装路径?

问:在安卓和苹果端需要取creator中resources文件里的文件用,问下,这怎么获取,有相关的api?

答:试试下面这个

let url = cc.url.raw('resources/xxx');
cc.log(url);

>反馈:成为解决方案

5. cocos2djs 如何使用自带的require?

问:如题, window系统命令行创建的cocos2d js 工程,无法使用cocos2d-html5自带的require , 但js-test ,里有用到require。不解,把js-test用到require的相关js文件添加到jslist中 也出现 require undefined …

答:cocos2d-js项目可以使用webpack或browserify进行代码编译,文件以模块的方式编写,可以使用require、exports导入导出模块。 我有一个demo,你可以参考一下,github地址:https://github.com/ShawnZhang2015/c2js-puremvc
游戏的源代码放在js目录下,使用browserify打包后输出到src目录。
此方法支持web和native。

6. protobufjs序列化后如何拼接上消息Id?

问:protobufjs序列化后得到的是arrayBuffer

    let pb = pbkiller.loadAll('proto', '');let player = new pb.UserLoginMsgReq();  player.openID = 0;player.logintype = 3;player.gameID = 3;let data = player.toArrayBuffer();

如何在data前面加上消息ID 以便服务收到数据后 进行反序列化?

答:你好我是pbkiller的开发者,所有potobuf数据都需要事先定义,你可以参考下面的做法

//在proto中定义一个前后端通用的协议
message PBMessage {uint32 id = 0; //消息IDbytes data = 1; //上层协议(二进制数据)
}
...
//游戏代码中用法:
let data = player.toArrayBuffer();
//实例化一个PBMessage消息
let message = new pb.PBMessage();
//设置消息ID和数据
message.id = xxx;
message.data = data;
//将message序列化发给服务器,服务器需要做两次反序列化
socket.send(message.toArrayBuffer());

此方法需要前后端配合,后端解码PBMessage,通过PBMessage.id将其路由给具体的处理函数解码PBMessage.data。

7. 在选中构建的时候选中调试模式怎么去掉左下角的 信息!

问:

答:构建时关闭调试模式

再问:我是说, 在我需要开启调试模式的情况下.

再答:不好意思!用下面的方法可以

cc.director.setDisplayStats(false);

反馈:谢谢咯

8. cocos creator打开错误

问:有没有好心人能告诉我一下这个问题是什么。难受刚下载下来什么都还没做,就冒出个问题出来。新手求大佬告知,关于这个问题我真的头大。

答:spawn是nodejs的执行外部命令的函数(创建子进程),我猜想有可能是环境变量问题,运行外部程序失败了。
给你两个方案:

  1. 你尝试下可以正常编译、预览游戏吗?如果可以,只是编辑器启动时报这个错,暂时不理会它。

  2. 换用1.6的版本试试,是否也有这个问题。

  3. 还有就是打开Creator的开发者工具:

反馈:非常感谢您对我的帮助,游戏能正常启动,1.6的版本也有这个问题,我现在调试一下看看。

9. creator中,如何给一个预制体中的按钮添加一个点击事件?

问:我制作了一个预制资源,这个预制资源中有一个按钮。当我在layout节点下面生成这个预制体后,如何给他上面的按钮添加一个点击事件,弹出一个提示框?在生成的时候我给他添加了一个标签,所以可以根据这个 标签拿到这个按钮,但是怎么给他添加点击事件?我用了this.button.node.on(),但是这个好像只能在onLoad中使用,在生产预制资源的方法中使用会报 “on”没有被定义的错!

答:可以在实例化prefab时,用代码创建事件监听

let node = cc.instantiate(prefab);
this.layout.addChild(node);
node.on(cc.Node.EventType.TOUCH_END, (touchEvent) => {cc.log('点击事件在此');
});

反馈:根据您的方法成功了,谢谢了。

10. creator 触摸事件关不掉?

问:

答:你上面this.btleft.on函数第二个参数是个匿名函数,off时又是一个新的匿名函数,当然关不掉。给你两个种方法:

  1. 你可以用targetOff,但会把所有事件给关了

  2. 将事件函数变成成员函数或子函数

{//定义一个事件函数_eventFunc() {...}//注册事件this.node.on('xxx', this._eventFunc, this); ...//关闭事件this.node.off('xxx', this._eventFunc, this);
}

反馈:回答被楼主赞了

11. 为什么我Label的字体大小不能调整?

问:字体font size 属性有个锁, 是怎么回事?数值也改变不了

答:Label处于SHRINK模式,Label的字体大小受node的Size约束,改变Size大小后就可以调整FontSize了

12. NODE节点和sprite组件和sprite节点关系?

问:NODE节点和sprite组件和new 出来的sprite节点是什么关系,官网说的很迷糊。

答:给你打个比喻,节点像一个人,组件则像这个人身上的装备,Sprite就像一件衣服,改变了节点的外观。一个节点可以装备多套装备,装备你还可以自己打造,就是自己写的组件代码。想想常玩的游戏,如魔兽、英雄联盟这些,英雄与装备的设计。

上面的比喻只说单个方向,再给你打个比方: 节点像一台机甲(小时候看过神龙斗士没有?),组件就像坐进机甲里的操纵者,操纵者有自己的特性,让机甲有不同的表现。而且这一台机甲可以坐很多个人,也就是很多个组件。

你说的 new出来的sprite,那是cocos2d-x/js中的概念了,在Creator中Sprite不能直接new出来,是先有机甲,再有给机甲中添加一个Sprite

let node = new cc.Node();
let sprite = node.addComponent(cc.Sprite);
sprite.xxx = yyy; // 给sprite赋值
node.x = 100; //给节点赋值
cc.log(sprite.node === node); // sprite内部操纵node

如果你觉得上面的方式创建一个Sprite很麻烦,你可以将他封装一下,可以尝试下面的方法:

cc.createComponent = function (componentType, parent) {let node = new cc.Node();if (parent instanceOf cc.Node) {node.parent = parent;}let component = node.addComponent(componentType);return component;
};//创建一个
let sprite = cc.createComponent(cc.Sprite);
let label = cc.createComponent(cc.Label);

推荐你看下我写的节点与组件的概念分享
http://www.jianshu.com/p/fc46301305fa
http://www.jianshu.com/p/2b92157179d3

结语

两个月前Shawn加班不多,每天都在论坛刷问题,早、中、晚连刷三次,一次十多分钟,比自己刷牙还积极!能帮助到别人自己也很高兴,同时也能收获很多。

这周遇到两位Creator道友,在工作中遇到了困难,他们在简书和Cocos论坛发现,我的文章中提到与他们问题相关的内容,随后联系上我,有幸我提供的方案对他们有所帮助。有趣的是,还收得了他们的红包酬谢,天啊,我的第一次,就被他们给夺走了(第一次付费服务),我都没来得及思考怎么会事,就发红包给收了,在这里对这两们道友说声感谢!

如果大家对我的文章、教程有什么建议和想法欢迎留言!

Cocos论坛九问九答相关推荐

  1. cdma特有效应_CDMA九问九答

    CDMA技术九问九答 一.什么是CDMA技术 CDMA直译为码分多址,是在数字通信技术的分支扩频通信的基础上发展起来的一种技术.所谓扩频,简单地说就是把频谱扩展.CDMA技术采用的是直接序列扩频方式, ...

  2. 云应用安全可信认证CAST |测评九问九答宣贯会将于4月20日召开

    CAST认证介绍 云应用安全可信认证(Cloud Application Security Trust ),简称"CAST认证".由"国际云安全联盟CSA大中华区&quo ...

  3. abb工业机器人电压不稳_ABB工业机器人应用常见故障九问九答

    一问:在什么情况下需要为机器人进行备份? 答:1.新机器第一次上电后. 2.在做任何修改之前. 3.在完成修改之后. 4.如果机器人重要,定期1周一次. 5.最好在U盘也做备份. 6.太旧的备份定期删 ...

  4. ibm mq并发访问队列_消息队列之九问九答

    问题1 为什么要用消息队列呀? 答:如下图所示,外呼系统需要将外呼结果发送给业务系统,如果采用rpc的调用方式:则带来的后果, 首先,1.外呼系统与业务系统严重耦合,多个业务系统需要外呼系统传输数据, ...

  5. 关于在线提供产品3D CAD模型的九问九答?

    如今,以客户为中心的卓越体验已经成为企业在数字化时代最重要的竞争优势.而现在的工程师对在线获取产品3D CAD模型的需求与日俱增.那么,什么样的3D CAD目录是优质的?调查结果发现:优质的3D CA ...

  6. SaaS九问,ToB必读

    本文来自:牛透社 一问:企服认知 熊飞:我是这么看的,我不知道别人怎么看.但是从经纬的角度,包括我们投了这么多2B公司,发展的都比较好.我觉得toB快到天亮了,我的看法是以下几点. 第一.行业发展.我 ...

  7. 九问国产操作系统,九大掌门人万字回应!

    整理 | 屠敏 责编 | 唐小引 出品 | CSDN(ID:CSDNnews) 九大操作系统掌门人对话:九问操作系统视频回顾:https://live.csdn.net/room/Hansen6666 ...

  8. div默认外边距是多少_CSS盒模型之内边距、边框、外边距 十九问(持续更新)...

    第一问:什么是盒模型? 第二问:两者的区别是什么? 第三问:怎么设置这两种模型呢? 第四问JS怎么获取和设置盒模型的宽高呢,你能想到几种方法 第五问:描述一下下面盒子的大小,颜色什么的(content ...

  9. Gartner 网络研讨会 “九问数字化转型” 会后感

    Gartner 网络研讨会 "九问数字化转型" 会后感 1 前言 近日笔者参加了由 Gartner 研究副总裁孙志勇博士分享的在线网络研讨会 "九问数字化转型" ...

最新文章

  1. 思科3750开启策略路由功能
  2. 车间AP无法接入故障分析处理
  3. 你应该将应用迁移到Spring 4的五个原因
  4. S3C2440的LCD编程
  5. win8中计算机的工具在哪,Win8画图工具在哪,Win8怎么打开画图?
  6. java.net.url 中文乱码_jsp get Url请求方式中文乱码问题解决办法
  7. Spring Boot笔记-自定义配置项默认值设置
  8. 动态规划之01背包问题和三角形问题
  9. Spark提交任务参数详解
  10. postman9.12汉化
  11. matlab调用第三方api_matlab与外部程序接口调用心得(原创)
  12. 微信公众号小程序微商城源码
  13. 配置网络地址转换NAT技术实验
  14. 怎么管理好精力,让自己每天精力充沛
  15. 西南民族大学第十届校赛(同步赛) 个人笔记 题解
  16. mysql实验训练2 数据查询操作_实验训练2:数据查询操作.doc
  17. 计算机网络-第1章 计算机网络和因特网-同步电大进度
  18. 【每天学点管理】——RACI责任制(快速解决责任分配问题)
  19. subprocess模块call的用法
  20. 学校食堂剩餐怎么办?智慧食堂解决方案来了

热门文章

  1. 淘客seo推广怎么做之自动加内链接系统开发
  2. R2104驱动电路的简单应用
  3. Linux:如何新建一个用户
  4. 第15届台州学院校赛题解
  5. 动卡空间服务器显示正在加载,绝地求生进不去游戏一直卡在加载画面是什么原因?附解决办法...
  6. 麒麟V10 设置打印机
  7. python自动开发环境_Python2.7.12开发环境构建(自动补全)
  8. 解决win10笔记本电脑无法开启热点
  9. 深度学习的基本专业术语
  10. 1、时间间隔天、年 2、2个时间比较大小