从零开始的小游戏开发之第二篇
前一篇日志讲了开始准备开发一个小的游戏我所做的准备,这篇总结一下开始使用cocos遇到的一些对新手不太友好的问题和解决办法吧
稍微录了一下自己游戏的视频,里面好多东东可能还需要改.开头的漫画是因为有人反馈进去就打怪太突然了我花两天画的用来过渡的
https://www.bilibili.com/video/BV1j5411h7ZY
我的qq群:1142732961 欢迎一起讨论交流啦
1.cocos 文本立刻 改变大小尺寸,获取cc.Label新size
根据文字的多少改变按钮宽度是个蛮常见的功能,为了实现这个功能我搜了很多诸如 “强制刷新获取高度” “Label下一帧才刷新大小” “改变string更新宽度高度” 这类关键词,给的答案一般是:
label._forceUpdateRenderData(true)
然而我在typescript里真正使用它时却是这个样子的:
显示的错误是 类型“Label”上不存在属性“_forceUpdateRenderData”。ts(2339)
没错, _forceUpdateRenderData 在 2.3中 标红 报错 不能直接用哦,莫非没有_forceUpdateRenderData这个函数?
之所以这样,原因是cocos creator2.3这个接口并没有导出定义,所以才会变成红色.但这并不影响使用,这样写,就能解决问题了:
console.log(this.label.node.getContentSize()) this.label.string = '我是啤啤鸭不卖萌' this.label['_forceUpdateRenderData'](true) console.log(this.label.node.getContentSize())
当然_forceUpdateRenderData并不是无敌的,我在使用 RESIZE_HEIGHT 的模式时遇到过它计算的结果是错误的,我实在想不出解决的办法,只好 scheduleOnce 在下一帧计算高度.当然绝大多数情况下这个还是能解决问题的
2.updateAlignment重新排版把所有的父节点也重新排版了
当界面或窗口大小发生变化时,一般需要重新适配所有的ccWidgets,比如我的游戏里就有面板的展开和收缩的功能.但是调用 updateAlignment 时它的所有父节点也会被全部重新排版,有的时候这不是我们希望的,尤其是一些游戏里不断改变组件大小位置的情况
如果只想改变自己的布局而不想影响它的父节点,可以试试这个办法:
this.widget.enabled = true
上面这句会刷新cc.Widgets的排版,但不是立即刷新,而是下一帧刷新,而 updateAlignment 是当前帧立即刷新,使用哪种办法可以自己来根据情况权衡
3.屏幕适配,根据屏幕比例或父节点适配改变ui大小尺寸,按固定比例百分比改变尺寸
开始我用的办法很蠢,是用cc.winSize获得屏幕的宽度和高度再乘以百分比来计算,如果在一些 Layout 里这样计算会非常麻烦,直到一次偶然我去次饭鼠标无意中对准了一个位置,肥来后我竟然看到了芥个:
天鸭,居然是可以输入百分比
居然藏得这么深?我百度搜了好多文章也没找到的东东居然会出现在这里!谁知道这里还会藏着这种操作.
用百分比可以解决很多烦人的问题,至少不需要写那么多 scheduleOnce 了.
好啦.就写到这里吧,有cocos的问题可以问我,虽然我也还是初学者....