cocos2dx-动作

菜鸟学习Cocos2d-x 3.x——浅谈动作Action
http://www.jellythink.com/archives/749


动作实例

简单的一个动作

BezierTo
    // 创建精灵对象
    Sprite* sp = Sprite::create("sprite.png");
    sp->setPosition(Point(50, visibleSize.height / 2));
    this->addChild(sp);

    // 创建贝塞尔曲线
    ccBezierConfig bezier;
    bezier.controlPoint_1 = Point(100, 0);  // 波谷偏向值
    bezier.controlPoint_2 = Point(200, 250); // 波峰偏向值 
    bezier.endPosition = Point(300, 50); // 动作终点

    // 创建动作
    BezierTo* bezierTo = BezierTo::create(4.0f, bezier);

    // 执行动作
    sp->runAction(bezierTo);
MoveTo
// 创建精灵对象
    Sprite* sp = Sprite::create("sprite.png");
    sp->setPosition(Point(50, visibleSize.height / 2));
    this->addChild(sp);
    // 创建MoveTo对象
    // MoveTo   (250 150为移动到的位置),0.9f为动作持续时间(单位为秒)
    MoveTo* moveTo = MoveTo::create(0.9f, Point(250, 150));
    // 精灵执行动作
    sp->runAction(moveTo);
卡牌翻转效果的实现动作
    /* 卡牌翻转效果的实现 */
    Sprite* sp11 = Sprite::create("pos.png");
    sp11->setPosition(Point(600, visibleSize.height / 2));
    this->addChild(sp11);

    Sprite* sp12 = Sprite::create("nes.png");
    sp12->setPosition(Point(600, visibleSize.height / 2));
    this->addChild(sp12);

    // 创建MoveBy对象
    // 动作持续时间, X,Y方向的拉伸值
    ScaleTo* scaleTo1 = ScaleTo::create(3.8f, 1.0f, 1.0f);
    ScaleTo* scaleTo2 = ScaleTo::create(3.8f, 0.0f, 1.0f);
    // 执行动作
    sp11->runAction(scaleTo1);
    sp12->runAction(scaleTo2);
闪烁动作
    // 闪烁动作
    Sprite* spBlink = Sprite::create("bird.png");
    spBlink->setPosition(Point(800, visibleSize.height / 2));
    this->addChild(spBlink);
    // 创建闪烁动作 动作持续时间, 闪烁次数
    Blink *blink = Blink::create(5.0f, 10);
    //
    spBlink->runAction(blink); 

持续动作

    //持续执行动作RepeatForever
    // 创建精灵对象
    Sprite* sp2 = Sprite::create("bird.png");
    sp2->setPosition(Point(300, visibleSize.height / 2));
    this->addChild(sp2);

    // JumpBy动作 
    /*
    参数
        duration    持续时间,以秒为单位
        position    跳跃的距离
        height  跳跃的高度
        jumps   跳跃次数
    */
    JumpBy *jumpBy = JumpBy::create(3.0f, Point(100, 1), 100, 1);

    RepeatForever* repeatForeverAction = RepeatForever::create(jumpBy);
    // 执行动作
    sp2->runAction(repeatForeverAction);

一连串动作集合

    /* 执行一连串的动作 */
    // 创建精灵对象
    Sprite* sp3 = Sprite::create("sprite.png");
    sp3->setPosition(Point(visibleSize.width/2, visibleSize.height / 2 ));
    this->addChild(sp3);

    //动作 
    MoveBy *movBy = MoveBy::create(2.2f, Point(30, 20));

    JumpBy* jmpBy = JumpBy::create(3.0f, Point(50, 1), 100, 5);

    RotateBy* rotateBy = RotateBy::create(2.5f, 220, 10);

    // 组建一连串的动作
    Action* actions = Spawn::create(movBy, jmpBy, rotateBy, NULL);

    // 执行动作
    sp3->runAction(actions);

动作函数回调

    Size visibleSize = Director::getInstance()->getVisibleSize();

    // 创建精灵对象
    Sprite* sp = Sprite::create("sprite.png");
    sp->setPosition(Point(visibleSize.width/2, visibleSize.height / 2));
    this->addChild(sp);

    //动作 
    MoveTo *moveToHome = MoveTo::create(10.0f, Point(visibleSize.width - 100, visibleSize.height / 2));

    auto callBackFunc = [&](){ // 回调一个函数
        backHome();
    };

    //创建回调函数
    CallFunc* callFunc = CallFunc::create(callBackFunc);

    // 组建一连串的动作,包括动作回调函数
    Action* actions = Spawn::create(moveToHome, callFunc, NULL);

    // 执行动作
    sp->runAction(actions);
void HelloWorld::backHome()
{
    Size visibleSize = Director::getInstance()->getVisibleSize();
    Label* label = Label::create("I am home", "Arial", 35);
    label->setPosition(visibleSize.width / 2, visibleSize.height / 2);
    this->addChild(label);
}

#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值