使用cocos creator 2.x 遇到的问题及解决办法!持续更新中

  • Creator 版本:
    v2.2.0 v2.2.1

  • 目标平台:
    Android iOS

  • 详细报错信息,包含调用堆栈:

  • 重现方式:

  • 之前哪个版本是正常的 :

  • 手机型号 :

  • 手机浏览器 :

  • 编辑器操作系统 :

  • 编辑器之前是否有其它报错 :

  • 出现概率:

  • 额外线索:

5赞

1.如果在上手机时报错如下

这是引入JS的路径可能错误,在模拟器,浏览器运行时 没有严格检查,上手机就报错啦!

2.注意一下这里的路径设置


默认是 3.2.0 可以使用3.4.0 3.5.2 都是可以的!
这里应该不会有大问题

3.这两行在编译时 可能会报错 如果不需要声音就注释掉吧!

4.gradle设置里这个地方需要修改!


替换如下

5.NDK,ANDROID SDK路径设置如下
cocos creator 编辑器的 文件->设置…
ndk,sdk路径及其文件夹下的目录

3赞

我的环境是
Windows10
Cocos Creator 2.2.1 2.2.0
Android Studio 3.5.2

6.mac 上下载新版COCOS CREATOR 时提示 无法打开,因为apple无法检查其是否包含恶意软件

大概是如下图所示:

无法打开,因为apple无法检查其是否包含恶意软件

只需要在Mac上设置下即可,具体方法如下:
打开Mac自带的软件「终端」(一般在“其它”这个文件夹里)
输入命令:
sudo spctl --master-disable
按回车键,随后提醒你输入电脑密码,这个时候输入密码然后按回车键即可解决。

特别说明,输入密码是不可见的,你只要输入完按回车键即可。

如果需要声音 记得CC里把声音的模块勾选上

很实用,赞一个

很实用,赞一个

7.关于构建发布,主要是IOS ANDROID平台的构建发布,我会在android studio 和XCODE里编译对应平台版本!

首次使用,请按照 构建->编译 的顺序,先构建,后编译,
之后如果只修改了脚本,JS,TS脚本的话,仅需要构建,即可!

如果升级了COCOS CREATOR,那么需要 把 build 目录下的对应平台目录删除 重新
构建 -> 编译, 否则可能会出现C++代码上的错误,因为C++代码可能没有被更新!

8.如果遇到 需要多组件组合的复合组件对象时,一定首选 预制体,不要按程序员的思路用代码添加组件对象方式来组合,这会有性能和其他不可预期的问题!

我遇到的是 把人物动画,脚下阴影,头上名字,武器,坐骑等 用代码组合方式,结果,数量少时还可以没什么问题,超过10个20个的时候,人物动画就会有某些图元不被控制,一直显示等问题,结果还是改成了预制体!

  1. 如何做到地图世界只显示半屏?

如果要做到 如上图这样的RPG 人物行走 镜头追踪 而且不是全屏,显示的位置大小 要自定义的情况
可以参考


这个帖子,但没能实现 显示窗口 自定义位置和尺寸
而且 cc.follow();这个方法在非全屏的情况下 还有问题,希望引擎组能帮忙解决!!

要是等不到 引擎修改!

就只能 通过 遮罩 + 刷新地图位置来自己解决啦!

这个实现如下:

地图的update()里需要更新 地图的坐标 来追踪 PC,确保PC在遮罩的中心位置

10。。。自定义事件的 发送,监听,

在一个脚本里没问题,如果在其他脚本监听到该事件呢?(在一个脚本里还监听个毛线啊!)

以系统事件形式 发送自定义事件,在其他脚本以系统事件来监听自定义事件!

这是发送

其他脚本中,以系统事件监听形式,监听自定义事件

11.。。。同一场景重新载入的问题
我的应用实例时 RPG游戏 pc从A地图 走到传送门 传送到B地图
这样还是 地图世界场景,只是地图切换了,当前没做优化,只是
调用了
cc.director.loadScene(“MAP”);

这样的话 就是 重新载入当前场景了!
切换场景时调用顺序 onDisable()->onDestroy()->onLoad()->onEnable()->start()

我的没有其他问题 只是有注册监听导致的问题,所以在 onLoad() 里去掉了监听,
在 start()里 加上监听,就可以了

onLoad() 里去掉了监听

在 start()里 加上监听

12。。。关于资源加载 cc.loader.loadRes 的使用

这么用 如果 要加载的图片不存在 就惨了!别问我为什么,o(︶︿︶)o 唉!

正确方式 看下面,先判断是否有err吧!

13.。。。。。不能有同名脚本 即便时在不同目录下

14,如何得知点击到了组件上?
初始 1级菜单,当点击时 出现2级菜单

点下 并不抬起并移动触摸点 时 菜单项(1,2级)都应该感知 触摸点是否在改项上,并做聚焦状态

代码如下:

因为层级的关系,需要得知 触摸点 所在 列表项的父级坐标,和列表项的 包围框
这样才可以做对比判断!

1赞
  1. setInterval() clearInterval() 方法要成对出现,否则 组件已经被销毁了,但循环方法还在执行! 会有严重后果啊!

  1. 关于获取文本字符串的显示宽度,脚本中会根据文本字符串宽度进行排版,计算位置之类的操作时,要对
    label.string 赋值,然后获取字符宽度
    label._forceUpdateRenderData();
    就可以更新了,但是一定要注意 Label的 Overflow属性 不能是 RESIZE_HEIGHT, <别问我咋知道地,搞了一天才发现!>

代码上 直接复制,立即获取即可

17 关于在代码内的颜色设置,使用字符串表示颜色的时候
官网文档如下

使用的时候如下:

要使用下面那行代码才可以!!!

  1. 关于修改SPINE动画的animation 动画名, 有2种方式 直接修改属性值和 用方法设置

这俩需要区别使用,并不是用哪个都行!!!

一.使用属性的情况

编辑里 找到spine的引用,在脚本里的代码如下

二. 使用方法设置这个动画名

将sp.Skeleton的组件直接引入到脚本里

脚本里直接用方法即可!

这俩不通用, 以免搞错导致动画变更失败啊!