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

被折叠的 条评论
为什么被折叠?



