上次我們實現了加分版的功能,但爲了能讓玩家快速得知加分信息,應該另外實現加分動畫。
在cocos中,我們顯然可以通過對label類對象進行動作的設計以及動作序列的排列,從而達到這樣的動畫效果。
功能設計
這裏我們打算實現的動畫效果爲:
1) 在碰撞的位置顯示分數獎勵
2) 分數獎勵向上運動,並且同時在漸漸放大
3) 移除分數獎勵
功能實現
void removeTips(int tag)
{
this->removeChildByTag(tag, true);
}
void updategrade(int increment,int x,int y)
{
grade += increment;
auto tips = Label::createWithBMFont(FNT_PATH, StringUtils::format("+%d", increment));
//位置在碰撞位置上方15px處
tips->setPosition(Vec2(x, y+15));
this->addChild(tips, 10);
//設置tag
tips->setTag(TIPS_TAG);
//0.4s內向上移動15px
FiniteTimeAction* move = MoveTo::create(0.4f,Vec2(x, y + 30));
//0.4s內放大爲原來的1.3倍
FiniteTimeAction* scaleup = ScaleBy::create(0.4f,1.3f);
//合併動作,使得兩個動作同時進行
FiniteTimeAction* actions = Spawn::create(move, scaleup, NULL);
//回調移除函數動作
auto actionRemove = CallFunc::create(CC_CALLBACK_0(HelloWorld::removeTips, this, TIPS_TAG));
//通過sequence來決定動作序列的先後
FiniteTimeAction* sequence = Sequence::create(actions, actionRemove,NULL);
//執行動作序列
tips->runAction(sequence);
//log("%d", grade);
}
在Cocos2d-x的開發中,可以根據不同的需求情況,設計不同的動作以及調整動作序列,從而能夠實現不同的文字動畫效果。像此次實現的加分動畫,在格鬥遊戲、射擊遊戲、橫屏遊戲上都有比較廣泛的應用。