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

  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的组件直接引入到脚本里

脚本里直接用方法即可!

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

第19粒… 编辑器上无法设置 组件的zIndex; 但如果在脚本上给一个node的zIndex属性改变值
之后在实例化它,zIndex还是会为0

所以在实例化后 再给zIndex设置值吧!

第20例, 如果需要用 富文本 ,记得加上 富文本模块设置!
还有 V2.4.3 必须加一下 Toggle 这个模块

第21粒, 预制体中使用Widget 会使组件不显示! 不信你试试!

第22粒, 安卓APK包的输入法被遮挡问题
修改java文件

这样输入法上就有输入框了!
如下图

另外 需要不显示输入框,使用自己游戏内的输入框
需要根据输入法的高度,来改变自己输入框的位置,
参考 xml java代码

这里没有该处具体值,具体想要的效果可以查查给什么值就好了!

第23粒: 接微信SDK时, 没有回调


画线的3处 包名 要一致, 也就是在CC里设置的包名

另外:很重要
java这边一定要有这个包,而且WXEntryActivity.java也一定放到这个包下面的 .wxapi 包里

还有这句一定要有!

第24粒: 关于 java回调js
Cocos2dxJavascriptJavaBridge.evalString(“cc.js_wxLogin(” + code + “)”);
别再弄这个了,根本不行, 调用简单的JS语句还可以,如果调用自己写的 模块.方法,还加参数,
一定要用 消息通知的形式

java代码:

js代码:

看了一下,当你遇到错误时,先想想为什么是错的,而不是第一感觉是换一种方法。你这些事例我看了,有很多是你用错了。比如widget,是因为你的父节点的大小为0,比如setInterval,这是js的方法,跟组件无关,自然不会跟组件的生命周期挂钩,应该用shedule,安卓调用js那个方法不是不行,是你的字符串拼接错了,而且线程是不是对的。

你说得对,同一个实现,有很多个方法,找不到对应的好办法,只能找一个可以实现的办法了,
比如 java掉js那个,文档就这么一写,试了不好用,网上百度了一下,也没更好的办法!