美文网首页
Cocos2dx-2.x用到的一些开发技巧总结

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

作者: 雷尘子 | 来源:发表于2018-05-15 18:51 被阅读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.待续

    相关文章

      网友评论

          本文标题:Cocos2dx-2.x用到的一些开发技巧总结

          本文链接:https://www.haomeiwen.com/subject/aorydftx.html