24、Cocos2dx 3.0游戏开发找小三之网格动作:高炫酷的3D动作

2023-05-11,,

重开发者的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/37596763


网格动作类似于动作特效,可以实现翻转、震荡、抖动、水的波纹等效果。
网格的基类: GridBase* Grid  获取或设置该节点的网格特效状态。网格应用于绘图平面上,可以实现水纹等 3D 特效;
基类定义:cocos2d/2d/CCGrid.h中;
基于这个基类有两个子类: Grid3D TiledGrid3D 这两个子类的共同点是:网格的每个子块都可以分离出来。
集成关系代码:

class CC_DLL GridBase : public Ref  class CC_DLL Grid3D : public GridBase  class CC_DLL TiledGrid3D : public GridBase


网格一般不直接应用,只需要明白Grid3D和TiledGrid3D ,了解网格动作是基于网格的即可; 运行网格动作的节点就像是被分成了大小相同的很多个矩形,通过这些矩形的动作来形成整体的网格动作, 16X12的网格运行的非常快,但是效果并不是很好; 32X24的网格看起来效果不错,但是有时间运行起来不会太快。
使用网格动作之前,需要取消OpenGL的深度检测: 调用      

  Director::getInstance()->setDepthTest(true);


网格动作和普通的动作的使用方式是一样的,可以通过runAction来运行动作,
具体的动作如下表所示:

部分网格动作的运行效果如图所示:






在使用网格动作时,网格动作结束之后,需要把网格清空:

void TextLayer::checkAnim(float dt) {     //auto s2 = getChildByTag(kTagBackground);     if ( _gridNodeTarget->getNumberOfRunningActions() == 0 && _gridNodeTarget->getGrid() != NULL)         _gridNodeTarget->setGrid(nullptr);; }

首先找到目标节点,然后检测目标节点是否还有动作,如果没有并且网格不为空,则调用setGrid函数并传入空参数(nullptr) 就可以清空网格; 当使用schedule一直检测调用该函数时,就可以实现清空无动作的节点网格。

《24、Cocos2dx 3.0游戏开发找小三之网格动作:高炫酷的3D动作.doc》

下载本文的Word格式文档,以方便收藏与打印。