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

重开发人员的劳动成果,转载的时候请务必注明出处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一直检測调用该函数时,就能够实现清空无动作的节点网格。




原文地址:https://www.cnblogs.com/jzssuanfa/p/6785114.html