这2个函数可以用于Jenkins打包脚本中

iOS

android

ScrollView滚动视图

在游戏开发过程中,由于手机屏幕空间有限,加上手指的灵动性,滑动成了最好的替换翻页的操作方式
ScrollView就是在这种需求驱动下的产物

cc.ScrollView和cc.ui.UIScrollView

前者是cocos2dx3.3原生的c++类,继承于cc.Layer
后者是QuickUI组件中的lua类,继承于cc.ClippingRectangleNode

quick中的cc.ui.UIScrollView用法

在实际运用过程中,我发现quick的滚动组件存在性能问题(windows上),一旦组件多了之后滚动不流畅,卡顿严重

原生cc.ScrollView用法

前言

Cocos Code IDE(以下简称CCI)是一款基于Eclipse和LDT的代码编辑器,其主要面向Cocos2d-X Lua/JS/Quick-lua的开发

问题的产生

在开发过程中,我们新建一个lua文件,都需要

关键你复制了还需要把”ClassName”改成你要的

相当麻烦

So

我们有模板,在CCI中点击Windows->Preferences在左边选择Lua->Editor->Templates,单击”New”按钮

Name是触发字串,我们填newclass
Context选Lua
Description是提示信息,就叫”新建类”好了
Pattern:

当你键盘敲出newclass(等代码提示),啪一个回车,一个类就创建好了,还烙上了你的大名,绝对酷炫

这么看大致就懂了,各种宏的含义如下

${date},${time},${user}这就是日期,时间,作者(os的登录名),用来标识这个文件是何时谁创建的,追查问题精确到人
${module_short_name} 短文件名,比如我一个文件”app/views/LoginView.lua”,就可以取到”LoginView”

举一反三

在我的项目中还有很多快捷的模板
比如 function

比如newlayer

恩 剩下的看大家创造力了 有好用的记得在文章下回复~

在出现对话的时候,我们往往不希望文字一下子突然出现,于是有了这个需求

文字要慢慢的出现,但是点击时,一下子显示完

用法如下

 

有倒计时功能的标签这个还是挺常见的

直接上代码吧

用法如下

 

除了text外,display.newTTFLabel里的所有参数都有效
新增了time参数(单位毫秒),format参数(支持H M S),triggerTime参数(触发事件,不传时为0)
倒计时结束会触发TimerLabel.ON_COUNT_DOWN

2.x时代的CCControlButton的确十分方便,策划们也十分喜欢按下有缩放的效果

到了3.x的项目,工具链已经相当完善,我使用的是cocos2dx3.2+quick3.2rc1+cocos code ide 1.0.1+cocos studio 1.6(以下简称ccs)

在ccs里建立的按钮,到了程序里实际上是UIPushButton

从quick的源码可以看出,UIPushButton继承于UIButton,UIButton继承于cc.Node

那么按下弹起的效果就得自己写了,好在quick扩展的方式很方便

我用起来是全局的

在载入ccs之后,会遍历所有节点,找出node.__cname == “UIPushButton”的元素,然后UIButtonEx.extend(node); node:setPressedActionEnabled(true)就可以了

需要按钮放大的,把0.9改成1.1就行了

之前精灵变灰都用的是别人写的一个GraySprite,实在是有很多局限

后来有个需求是要让CCControlButton在不传disable状态图片的时候,自动把normal的图片变灰

查阅多方资料后,终于把问题搞定

  1. 在cocos2dx/shaders目录下新建一个ccShader_PositionTextureGray_frag.h
  2. 找到ccShaders.h,在最后加上
  3. 找到ccShaders.cpp,在最后加上
  4. 找到CCGLProgram.h在enum后面的define后加上
  5. 找到CCShaderCache.cpp,在开头enum的最后加上kCCShaderType_PositionTextureGray
  6. 继续在CCShaderCache.cpp的loadDefaultShaders()最后添加
  7. 继续在CCShaderCache.cpp的reloadDefaultShaders()最后添加
  8. 继续在CCShaderCache.cpp的loadDefaultShader(CCGLProgram *p, int type)最后添加一个case条件
  9. 新建一个ColorUtils.h
  10. 新建一个ColorUtils.cpp
  11. 使用
    对于CCSprite

    对于CCScale9Sprite

    remove亦然

 

来自于CocosCodeIDE技术交流群”文件夹”同学

 

这个需求来自于工作中的一个需求

两个城池之间的路径是美术事先画好的,武将需要沿着画好的曲线行进

经过查找资料,发现了这篇文章

用到了下面这个公式:
阶贝塞尔曲线可如下推断。给定点P0、P1、…、Pn,其贝塞尔曲线即
贝塞尔曲线公式高阶曲线为建构高阶曲线,便需要相应更多的中介点。对于三次曲线,可由线性贝塞尔曲线描述的中介点Q0、Q1、Q2,和由二次曲线描述的点R0、R1所建构:
三次贝塞尔曲线

对于四次曲线,可由线性贝塞尔曲线描述的中介点Q0、Q1、Q2、Q3,由二次贝塞尔曲线描述的点R0、R1、R2,和由三次贝塞尔曲线描述的点S0、S1所建构:
四次贝塞尔曲线

更复杂的:
五次贝塞尔曲线

参考资料

以下为lua的实现方式,参考了上文中的c++算法,并没有考虑在极为高阶的情况下的性能问题

代码基于quick-cocos2d-x 2.2.5编写(谁叫他快呢)

 

 

最后放一张效果图


一般情况下,我们使用sprite->getBoundingBox()->containsPoint(touchLocation)来判断是否触摸到了一个精灵.

需求是万变的,经常需求要求我们触摸时判断一个不规则图形