//CCAnimation是封装动画功能的类,它可以看作是由若干个_CCSpriteFrame对象组成的序列,精灵按照顺序切换它们,就形成了动画。CCAnimation也有内存池,
//此处的animationName就是key,内存池通过它找到CCAnimation对象,再通过索引frameIndex找到动画序列中的某一帧,将该帧设为精灵的当前显示帧。
CCAnimation* animation = CCAnimation::create(); for( int i=1;i<15;i++) { char szName[100] = {0}; sprintf(szName, "Images/grossini_dance_%02d.png", i); animation->addSpriteFrameWithFileName(szName); } // should last 2.8 seconds. And there are 14 frames. animation->setDelayPerUnit(2.8f / 14.0f); animation->setRestoreOriginalFrame(true); CCAnimate* action = CCAnimate::create(animation); m_grossini->runAction(CCSequence::create(action, action->reverse(), NULL));
CCSize s = CCDirector::sharedDirector()->getWinSize(); CCPointArray *array = CCPointArray::create(20); array->addControlPoint(ccp(0, 0)); array->addControlPoint(ccp(s.width/2-30, 0)); array->addControlPoint(ccp(s.width/2-30, s.height-80)); array->addControlPoint(ccp(0, s.height-80)); array->addControlPoint(ccp(0, 0)); // // sprite 1 (By) // // Spline with no tension (tension==0) // /*这个类是样条曲线动作,其创建函数CCCardinalSplineBy::create(float duration, cocos2d::CCPointArray *points, float tension);中duration是时间间隔,
points是控制点列表,tension是松紧程度。tension==1时,样条线是分段直线。
tension<1向外松弛弯曲,tension>1向内缩紧弯曲。By动作是以当前坐标为新坐标原点。*/ CCCardinalSplineBy *action = CCCardinalSplineBy::create(3, array, 0); CCActionInterval *reverse = action->reverse(); CCFiniteTimeAction *seq = CCSequence::create(action, reverse, NULL); m_tamara->setPosition(ccp(50, 50)); m_tamara->runAction(seq); // // sprite 2 (By) // // Spline with high tension (tension==1) // CCCardinalSplineBy *action2 = CCCardinalSplineBy::create(3, array, 1); CCActionInterval *reverse2 = action2->reverse(); CCFiniteTimeAction *seq2 = CCSequence::create(action2, reverse2, NULL); m_kathia->setPosition(ccp(s.width/2, 50)); m_kathia->runAction(seq2);
CCCatmullRomTo *action2 = CCCatmullRomTo::create(3, array2); CCCatmullRomBy *action3 = CCCatmullRomBy::create(3, array2); CCCatmullRomTo::create 参数1:执行时间 参数2:点数组 CCCatmullRomBy::create 参数1:执行时间 参数2:点数组 大家看到了,这个云线呢,在拐弯处移动速度稍快哦。
ccBezierConfig bezier; bezier.controlPoint_1 = ccp(0, s.height/2); bezier.controlPoint_2 = ccp(300, -s.height/2); bezier.endPosition = ccp(300,100); CCActionInterval* bezierForward = CCBezierBy::create(3, bezier); CCBezierBy::create 参数1:执行时间 参数2:贝塞尔Config 贝塞尔曲线的用途广泛,当然咯,我们的游戏中也不缺乏他的身影,这里重要的说下ccBezierConfig 。Cocos2D-X 中需要用到贝塞尔曲线的地方都有他的身影。其实,它也没有什么神秘的,只是一个拥有三个 CCpoint 的结构体,C2D-X 为了我们使用的方便提供了出来。
CCActionInterval* action1 = CCBlink::create(2, 10); CCBlink::create 参数1:执行时间 参数2:闪烁次数 这个就很简单了,像我们游戏中被攻击的时候,要闪一下就用他,很方便,很简单。 当然,效果也是很好的。
CCActionInterval* action1 = CCFadeIn::create(1.0f); CCActionInterval* action2 = CCFadeOut::create(1.0f); CCFadeIn::create 参数1:执行时间 CCFadeOut::create 参数1:执行时间
CCActionInterval* action1 = CCTintTo::create(2, 255, 0, 255); CCActionInterval* action2 = CCTintBy::create(2, -127, -255, -127); CCTintTo::create 参数1:时间 参数2:red值 参数3:green值 参数4:blue值 CCTintBy::create 参数1:时间 参数2:red值 参数3:green值 参数4:blue值 这里的By是在此基础之上变化。之前的都是在坐标上面变化,这个是在颜色上变化哦
Sequence of InstantActions:动作回调 CCFiniteTimeAction* action = CCSequence::create( CCPlace::create(ccp(200,200)), CCShow::create(), CCMoveBy::create(1, ccp(100,0)), CCCallFunc::create(this, callfunc_selector(ActionSequence2::callback1)), CCCallFuncN::create(this, callfuncN_selector(ActionSequence2::callback2)), CCCallFuncND::create(this, callfuncND_selector(ActionSequence2::callback3), (void*)0xbebabeba), NULL); CCCallFunc::create 参数1:函数所在对象 参数2:selector包装函数 CCCallFuncN::create 参数1:函数所在对象 参数2:selector包装函数 CCCallFuncND::create 参数1:函数所在对象 参数2:selector包装函数 参数3:自定义参数 这里,我们第一次接触到了 Cocos2D-X 中的回调函数,在游戏中,我们想在一个动作结束时得到一个反馈,我们就要用到这些函数。