第四天 精灵Action

来源:互联网 发布:js递归函数 编辑:程序博客网 时间:2024/06/02 16:32

这章基本都是代码,如果要源码的朋友。请及时联系我。

QQ:1663888959

邮箱:1663888959@qq.com

CCAction核心类


做一个类似与类似cocos2d中的运动小Demo

创建一个程序。命名为CCActionInterval

删除HelloWorld.h和.cpp文件

新建一个类CCActionIntervalDemo

在CCActionIntervalDemo.h

声明下面方法和变量

 

 

在init()方法中添加如下代码

   //创建三个按钮

   CCSize size =CCDirector::sharedDirector()->getWinSize();

   CCMenuItemImage *leftItem = CCMenuItemImage::create("b1.png","b2.png", this, menu_selector(CCActionIntervalDemo::onClick));

   leftItem->setTag(1);

   

   CCMenuItemImage *rightItem = CCMenuItemImage::create("r1.png","r2.png", this, menu_selector(CCActionIntervalDemo::onClick));

   rightItem->setTag(2);

   

   CCMenuItemImage *playItem = CCMenuItemImage::create("f1.png","f2.png", this, menu_selector(CCActionIntervalDemo::onClick));

playItem->setTag(3);

 

CCMenu *menu =CCMenu::create(leftItem, rightItem, playItem, NULL);

   //定义位置

    menu->setPosition(ccp(size.width / 2,size.height / 5));

    //定义排列顺序

    menu->alignItemsHorizontally(); //水平排列

    this->addChild(menu);

 

//添加两个精灵

sprite =CCSprite::create("gg.png");

   sprite->setPosition(ccp(0, 0));

   point = sprite->getPosition();

   this->addChild(sprite);

   

   sprite2 = CCSprite::create("kk.png");

   sprite2->setPosition(ccp(size.width / 2, size.height / 2));

   point = sprite2->getPosition();

   this->addChild(sprite2);

   

//创建label

   titlelabel = CCLabelTTF::create("动作","AppleGothic", 20);

    titlelabel->setPosition(ccp(size.width /2, size.height - 50));

   

    this->addChild(titlelabel);

   

    array_Actions = CCArray::create();

    array_Titles = CCArray::create();

    array_Actions->retain();

array_Titles->retain();//这里必须retain 因为是autorelease

 

下面是精灵各个动作的代码,基本都很类似,代码都是封装好的,只需要我们稍加理解就可以熟悉他们的使用了。下面是代码,在这里我就不详细讲了。

以后结合项目代码在给大家详细讲解。

 

//移动

    CCMoveTo *moveTo = CCMoveTo::create(1, ccp(size.width- 20, size.height / 2));

    // sprite->runAction(moveTo);

   

    CCDelayTime *time = CCDelayTime::create(3);

    CCMoveBy *moveBy = CCMoveBy::create(1, ccp(-size.width+ 100, size.height/ 2 - 50));

    // sprite->runAction(moveBy);

    CCString *move = CCString::create("moveTo/moveBy");

    array_Titles->addObject(move);

   

    //组合动作

    CCSequence *sequence = CCSequence::create(moveTo,time, moveBy, NULL);

    //sprite->runAction(sequence);

    array_Actions->addObject(sequence);

   

   

    CCRotateTo *rotateTo = CCRotateTo::create(1,720);

    CCRotateBy *rotateBy = CCRotateBy::create(1,360);

    CCSequence *rotateSequence = CCSequence::create(rotateTo,rotateBy, NULL);

    CCString *rotate = CCString::create("rotateTo/rotateBy");

    array_Titles->addObject(rotate);

    array_Actions->addObject(rotateSequence);

   

   

    //缩放

    CCScaleTo *scaleTo = CCScaleTo::create(1, 0.5);

    CCScaleBy *scaleBy = CCScaleBy::create(1, 2);

    CCSequence *scaleSequence = CCSequence::create(scaleTo,scaleBy, NULL);

    CCString *scale = CCString::create("scaleTo/scaleBy");

    array_Titles->addObject(scale);

    array_Actions->addObject(scaleSequence);

   

    //跳跃

    CCJumpTo *jumpTo = CCJumpTo::create(2, ccp(size.width/ 2, size.height), 20, 5);

    CCJumpBy *jumpBy = CCJumpBy::create(2, ccp(0 ,- size.height/ 2), 20, 5);

    CCSequence *jumpSequence = CCSequence::create(jumpTo,jumpBy,NULL);

    CCString *jump = CCString::create("jump");

    array_Actions->addObject(jumpSequence);

    array_Titles->addObject(jump);

   

    //reverse()函数 相反的动作 To没有反动作

    CCString *reverse = CCString::create("reverse翻动作");

    CCActionInterval *reverseAction =scaleBy->reverse();

    array_Titles->addObject(reverse);

    array_Actions->addObject(reverseAction);

   

    //闪烁动作

    CCString *blinkStr = CCString::create("Blink");

    CCBlink *blink = CCBlink::create(1, 10000);

    array_Actions->addObject(blink);

    array_Titles->addObject(blinkStr);

   

    //贝塞尔曲线动作

    CCString *bezierStr = CCString::create("贝塞尔曲线");

    ccBezierConfig bezierConfig;

    bezierConfig.controlPoint_1 = ccp(320, 320);

    bezierConfig.controlPoint_2 = ccp(400, 0);

    bezierConfig.endPosition = ccp(480, 160);

   

    CCBezierTo *bezierTo = CCBezierTo::create(1,bezierConfig);

    array_Actions->addObject(bezierTo);

    array_Titles->addObject(bezierStr);

   

    //CCsquence动作组合 同时的动作

    CCString *sqawnStr = CCString::create("同时的动作");

    CCSpawn *sqawn = CCSpawn::create(moveTo,blink, NULL);

    array_Titles->addObject(sqawnStr);

    array_Actions->addObject(sqawn);

   

    //有限次数的重复动作

    CCString *repeatStr = CCString::create("Repeat");

    CCRepeat *repeat = CCRepeat::create(CCRotateBy::create(1,60), 6);

    array_Titles->addObject(repeatStr);

    array_Actions->addObject(repeat);

   

    //无限重复动作

    CCString *ForeverStr = CCString::create("RepeatForever");

    CCRepeatForever *repeatForever = CCRepeatForever::create(blink);

    array_Actions->addObject(repeatForever);

    array_Titles->addObject(ForeverStr);

   

    //改变动作的执行目标

    CCString *Target = CCString::create("Target");

    CCMoveTo *to = CCMoveTo::create(1, ccp(480,160));

 

    CCTargetedAction* targetAction = CCTargetedAction::create(sprite2,to);

    CCSequence *TargetSequence = CCSequence::create(to,targetAction,  NULL);

    array_Titles->addObject(Target);

    array_Actions->addObject(TargetSequence);


void CCActionIntervalDemo::onClick(CCObject *sender)

{


    static int index;

     //下次点击时,结束上一次动画

    sprite->stopAllActions();

    sprite->setPosition(point); //让精灵回到初始位置

    sprite->setRotation(0); //会到原来旋转角度

    sprite->setScale(1);//回到初始大小

    sprite2->setPosition(ccp(0, 0));

    CCMenuItemImage *item = (CCMenuItemImage *)sender;

    int tag = item->getTag();

    switch (tag) {

        case 1:

        {

            if (--index < 0) {

                index = array_Actions->count() - 1;

            }

        }

            break;

            

        case 2:

            

            break;

            

        case 3:

        {

            if (++index >= array_Actions->count())

            {

                index = 0;

            }

        }

            break;

    }

    CCString *str = (CCString *)array_Titles->objectAtIndex(index);

    titlelabel->setString(str->getCString());

    

    CCAction *action = (CCAction *)array_Actions->objectAtIndex(index);

    sprite->runAction(action);

}


//一定要写析构函数,因为前面已经进行了retain 

CCActionIntervalDemo::~CCActionIntervalDemo()

{

    array_Titles->release();

    array_Actions->release();

}

运行结果图如下(运行前选择iphone4s,分辨率320x480)
关于屏幕适配后面会提到



0 0
原创粉丝点击