【cocos2dx-3.0beta-制作flappybird】一闪一闪亮晶晶—游戏金币闪烁效果实现

一、引言

在Flappy Bird这个游戏中,我们其实也是用到了粒子效果。那便是在游戏结束画面当中,奖牌周围若隐若现的星星了。

【cocos2dx-3.0beta-制作flappybird】一闪一闪亮晶晶—游戏金币闪烁效果实现_第1张图片

二、原理分析

在前述的素材当中,我们注意到了如下素材:


实际上,关于星星闪烁的过程,我们可以把它分为两个步骤
第一个步骤是星星由小变大的过程
第二个步骤是星星由大变小的过程
这两个动作组合在一起,就形成了星星的一次闪烁

此外,每一次闪烁完成以后,再在奖牌所在区域内随机选取一个坐标来作为下一次星星显示的位置。如此不断就产生了众多星星不停闪烁的错觉了。

三、具体实现

1、设置闪烁的精灵
Sprite* blink;
2、为精灵添加动画
void StatusLayer::setBlinkSprite() {
this->blink = Sprite::createWithSpriteFrame(AtlasLoader::getInstance()->getSpriteFrameByName("blink_00"));
Animation *animation = Animation::create();
animation->setDelayPerUnit(0.1f);
//from small to big
for (int i = 0; i < 3; i++){
const char *filename = String::createWithFormat("blink_%02d", i)->getCString();
SpriteFrame *frame = AtlasLoader::getInstance()->getSpriteFrameByName(filename);
animation->addSpriteFrame(frame);
}
//from big to small
for (int i = 2; i >= 0; i--){
const char *filename = String::createWithFormat("blink_%02d", i)->getCString();
SpriteFrame *frame = AtlasLoader::getInstance()->getSpriteFrameByName(filename);
animation->addSpriteFrame(frame);
}
auto animate = Animate::create(animation);
auto actionDone = CallFunc::create(bind(&StatusLayer::blinkAction,this));
auto sequence = Sequence::createWithTwoActions(animate, actionDone);
blink->runAction(RepeatForever::create(sequence));
}
3、选取下次闪烁的位置
void StatusLayer::blinkAction() {
if(this->blink && this->blink->getParent()) {
Size activeSize = this->blink->getParent()->getContentSize();
this->blink->setPosition(rand()%((int)(activeSize.width)), rand()%((int)(activeSize.height)));
}
}
4、在结束面板调用闪烁
this->setBlinkSprite();

四、小结

本小结主要介绍了游戏结束画面当中的一个小细节——星星闪烁的实现。有关详细代码,还请移步到github: https://github.com/OiteBoys/Earlybird

你可能感兴趣的:(游戏,cocos2dx,flappybird)