Cocos2dx-2.x用到的一些开发技巧总结

2018-05-15  本文已影响0人  雷尘子

1.设置控件旋转

// 逆时针90度

pImg->runAction(CCRotateBy::create(0.15f, 90.0));

// 顺时针90度

pImg->runAction(CCRotateBy::create(0.15f, -90.0));

2.连续触发一个动画(比如移动到某个位置),防止发生位置错乱

// 先停掉上次可能还未结束的动画,否则容易失控

pBtn_Set->stopAllActions();

// 再执行相应的动作(最好使用CCMoveTo到具体的CCPoint,使用CCMoveBy容易错乱)

if(true){

        pBtn_Set->runAction(CCEaseBackOut::create(CCMoveTo::create(0.4f,ccp(x1,y1))));

}else{

        pBtn_Set->runAction(CCEaseBackOut::create(CCMoveTo::create(0.4f,ccp(x2,y2))));

}

3.反转设置骨骼动画,将骨骼动画左右、上下对称显示,一个动画可以设置不同的方向

cocos2d::extension::CCArmature *armature = XXX ;

// scale为负就对称显示动画,为正就是原方向显示动画,既可以设置大小,也可以换个方向

// X轴方向对称反转显示,并缩小为原来的一半

armature->setScaleX(-0.5f);   

// Y轴方向对称正常显示,并缩小为原来的一半

armature->setScaleY(0.5f);   

4.镜像反转,(比如想要动态反转一张卡片,又不想改变卡片的原始坐标值)

// X方向反转动画

pImage->runAction(CCSequence::create(CCScaleTo::create(1.0f, -s_fScale,fScale),NULL)); 

// 设置X轴镜像反转

pImage->setFlipX(true);

反转动画执行完毕,显示想要的卡片(正面或反面)

pImage->loadTexture(卡片正面image,UI_TEX_TYPE_PLIST);

如果反转之后,想恢复原初始化状态,就再来一次

pImage->setScaleX(-s_fScale);   

pImage->setFlipX(true);

5.根据数据条数,动态设置UIScrollView的大小和位置

// 滚动层可纵向滑动,宽度固定为W,高度为H

// 假如每条元素的高度为w,元素个数为n,实际容纳的高度为nContainerHeight

float  H = pScroll_Rank->getSize().height;

float W =  pScroll_Rank->getSize().width;

if (w*n <= H){

     nContainerHeight = H;

}else

    nContainerHeight = w*n;

}

// 设置内部真实高度

pScroll_Rank->setInnerContainerSize(CCSizeMake(W,nContainerHeight));

// 设置初始位置

pScroll_Rank->getInnerContainer()->setPositionY(-nContainerHeight+H);   

6.动态创建item,监听UIScrollView滑动到底部事件

// nIndexCreate 创建下标(第几次创建)  nCountCreate 总共可创建次数

// nCountTotal需要创建的总数目                  nCountOnce   每次创建个数

pScroll_Rank->addEventListenerScrollView(this,scrollvieweventselector(MyRankLayer::onScroll));

int nIndexCreate = 0; // 初始化全局变量

// 创建item

ceateRank(0);

void MyRankLayer::onScroll(CCObject* pSend, cocos2d::ui::ScrollviewEventType emType){

        if (emType == SCROLLVIEW_EVENT_SCROLL_TO_BOTTOM){

                nIndexCreate ++;

                if (nIndexCreate < nCountCreate && nCountTotal > nIndexCreate * nCountOnce ){

                        // 符合条件,创建item

                        createRank(nIndexCreate);

                }

        }

}

7.动画后,延迟执行一些内容(精灵从一个位置弧线跳到另一个位置后,移除自身)

pImg->runAction(CCSequence::create(CCJumpTo::create(0.25f, ccp(0, 0), 150.0f ,1),

CCScaleTo::create(0.15f,0.9f,0.9f),CCScaleTo::create(0.15f,1.0f,1.0f),

CCDelayTime::create(1.8f), CCFadeOut::create(0.2f), CCRemoveSelf::create() ,NULL));

8.执行动画后,在方法doSomething里做一些逻辑处理

pImg->runAction(CCSequence::create(pAction,CCCallFunc::create(this,callfunc_selector(MyLayer::doSomething)),NULL));

9.执行闪烁动画结束后,有时候精灵消失,setVisible(true)

// CCRepeatForever 循环执行闪烁动画,一秒3次

pImg->runAction(CCRepeatForever::create(CCBlink::create(1.0f, 3)));

// 停止动画后,记得setVisible(true)

pImg->stopAllActions();

pImg->setVisible(true);

10.一个震屏效果

pLayout->runAction(CCSequence::create(

CCMoveTo::create(0.00f,ccp(-4.0-2,-3.5-2)),

CCDelayTime::create(0.07f),

CCMoveTo::create(0.00f,ccp(+1.0+2,+1.6+2)),

CCDelayTime::create(0.07f),

CCMoveTo::create(0.00f,ccp(+1.0+2,-4.5-2)),

CCDelayTime::create(0.07f),

CCMoveTo::create(0.00f,ccp(-4.0-2,-0.5-2)),

CCDelayTime::create(0.07f),

CCMoveTo::create(0.00f,ccp(0.0,0.0)),

NULL

));

11.CCSpawn同时执行几种(如:缩放和移动)动画,CCSequence按顺序执行队列里的动画

pImg>runAction(

CCSequence::create(

CCSpawn::create(CCScaleTo::create(0.00f,0.4f),CCMoveTo::create(0.00f,ccp(size.width*0.5,size.height*0.5-60.0f)), NULL),

CCSpawn::create(CCScaleTo::create(0.1f,1.1f), CCMoveTo::create(0.1f,ccp(size.width*0.5, size.height*0.5+50.0f)),  NULL),

CCSpawn::create(CCScaleTo::create(0.15f,1.0f),CCMoveTo::create(0.15f,ccp(size.width*0.5,size.height*0.5+30.0f)),  NULL),

NULL));

12.待续

上一篇下一篇

猜你喜欢

热点阅读