cocos2d-x学习MoonWarriorsx(二)开始菜单
上一篇文章已经实现了MoonWarriors开始菜单的大部分元素,还差一个运动的飞船和一个点击newGame的特效和音效。
1.飞船
void Effect::flareEffect(CCNode *parent, CCCallFunc *callback){ // 特效图片 CCSprite *flare = CCSprite::create(s_flare); // 设置混合模式 ccBlendFunc cbl = {GL_SRC_ALPHA, GL_ONE}; flare->setBlendFunc(cbl); // 添加到父节点 parent->addChild(flare, 10); // 设置初始透明度 flare->setOpacity(0); // 设置初始位置 flare->setPosition(ccp(-30, 297)); // 设置初始角度 flare->setRotation(-120); // 设置初始放大系数 flare->setScale(0.2); // 透明度渐变 CCActionInterval *opacityAnim = CCFadeTo::create(0.5, 255); CCActionInterval *opacDim = CCFadeTo::create(1, 0); // 大小渐变 CCActionInterval *bigAnim = CCScaleBy::create(0.7, 1.2, 1.2); // 渐变速率,正玄变化,由快到慢 CCEaseSineOut *biggerEase = CCEaseSineOut::create(bigAnim); CCActionInterval *moveAnim = CCMoveBy::create(0.5, ccp(328, 0)); CCEaseSineOut *moveEase = CCEaseSineOut::create(moveAnim); // 角度旋转 CCActionInterval *roteAnim = CCRotateBy::create(2.5, 90); // 角度旋转速度,指数变化 CCEaseExponentialOut * rotateEase = CCEaseExponentialOut::create(roteAnim); // 放大到原大小 CCScaleTo *bigger = CCScaleTo::create(0.5, 1); // 动画完成后回调函数 CCCallFuncN *onComplete = CCCallFuncN::create(flare, callfuncN_selector(Effect::killFlare)); // 执行动画和回调函数 flare->runAction(CCSequence::create(opacityAnim, biggerEase, opacDim, onComplete, callback, NULL)); flare->runAction(moveEase); flare->runAction(rotateEase); flare->runAction(bigger);}
这个还是按照js的逻辑写的。传了一个parent的node和一个回调函数进来,然后一系列动作,最后执行动作和回调。
回调函数里有个killFlare函数,其实就是用来干掉这个特效精灵的,因为如果不干掉,会一直添加。
到这里,这个菜单的基本功能就做完了,还差一些回调,状态控制等没有加,后续再来弄。