Cocos2d-x 之动作 Action

本文详细介绍了 Cocos2d 中的瞬时动作和持续动作,并通过实例展示了如何利用这些动作来实现精灵的各种动态效果,包括移动、旋转、缩放、闪烁等。

瞬时动作 VS 持续动作

Cocos2d中的动作主要分为两大类,瞬时动作Instant和持续动作Interval。

    auto sprite=Sprite::createWithTexture(img4);
    sprite->setPosition(visibleSize/2);
    sprite->setScale(3.5);
    this->addChild(sprite);

    auto sprite2 = Sprite::createWithTexture(img2);
    sprite2->setPosition(0, 0);
    sprite2->setOpacity(1);
    this->addChild(sprite2);

    auto sprite3 = Sprite::createWithTexture(img3);
    sprite3->setPosition(200, 0);
    this->addChild(sprite3);

    auto sprite4 = Sprite::createWithTexture(img4);
    sprite4->setPosition(250, 100);
    this->addChild(sprite4);

    auto sprite5 = Sprite::createWithTexture(img5);
    sprite5->setPosition(390, 200);
    this->addChild(sprite5);

    //移动、旋转、缩放
    //顺序动作、合并动作
    sprite->runAction(Sequence::create(MoveTo::create(0.5f, Vec2(50, 50)), ScaleTo::create(0.5f, 1.0f), RotateBy::create(0.8f, Vec3(0, 0, 360)), CallFunc::create([sprite]() {
        sprite->runAction(Spawn::create(MoveBy::create(1.0f, Vec2(100, 100)), ScaleBy::create(1.0f, 2.0f), RotateBy::create(1.0f, Vec3(0, 0, 180)),NULL));
    }),NULL));

    //出现、重复动作
    auto move2=MoveBy::create(4,Vec2(100,100));
    auto fadeIn=FadeIn::create(4.0f);
    auto rotate=RotateBy::create(4.0f,360);
    auto spawn=Spawn::create(move2,fadeIn,NULL);
    sprite2->runAction(Repeat::create(Sequence::create(spawn,rotate,rotate->reverse(),spawn->reverse(),NULL),3));

    //闪烁、不断重复
    auto jump=JumpBy::create(3,Vec2(0,0),100,1);
    auto shrink=Blink::create(3,8);
    sprite3->runAction(RepeatForever::create(Spawn::create(jump,shrink,NULL)));

    //瞬时动作,不能组合
    sprite4->runAction(FlipX::create(true));
    sprite4->runAction(FlipY::create(true));

    //蒙版、变形、回调
    sprite5->runAction(Sequence::create(TintBy::create(3,100,-100,30),TintTo::create(3,20,200,255),SkewBy::create(1,10,20),CallFunc::create([](){
        CCLOG("play complete");
    }),NULL));

跟场景一样,cocos2d也定义了一些动作的特效,这些特效是基于网格实现,我们只需把精灵放入网格中,再将网格加到场景中。然后就可以给这个网格使用动作特效了。

    auto role=NodeGrid::create();
    role->addChild(Sprite::create("girl.png"));
    this->addChild(role);
    role->setPosition(visibleSize/2);
    role->setScale(1.5);

    auto shaky=ShakyTiles3D::create(3,Size(30,30),5,false);
    auto shuffle=ShuffleTiles::create(1,Size(30,30),3);
    auto turnoff=TurnOffTiles::create(0.5,Size(30,30),10);
    auto wave1=Waves3D::create(2,Size(30,30),5,40);
    auto wave2=Waves3D::create(2,Size(30,30),0,0);
    //role->runAction(Shaky3D::create(3,Size(20,20),5,false));//震动,不显示网格
    //role->runAction(Sequence::create(shaky,shaky->reverse(),NULL));//震动,显示网格
    //role->runAction(ShatteredTiles3D::create(1,Size(30,30),5,false));//碎片结果
    //role->runAction(ShuffleTiles::create(0.1f,Size(180,180),3));//爆炸
    //role->runAction(TurnOffTiles::create(2,Size(30,30),10));//碎片消失
    //role->runAction(Waves3D::create(2,Size(30,30),5,40));//波浪
    role->runAction(Sequence::create(shaky,shuffle,turnoff,NULL));
    //role->runAction(Sequence::create(wave1,wave2,NULL));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值