想制作一个显示伤害数字的组件,平时不显示,受到伤害时显示伤害值,并且逐位跳动,然后消失。
数字的素材初始化时加载到SpriteFrameCache中,显示前根据伤害数字修改组件中相应位置sprite的SpriteFrame,然后显示。
类定义如下:
class DigitSprite : public Node
{
public:
bool init();
CREATE_FUNC(DigitSprite);
void showDigit(int value);
private:
void extendSpriteBatch(int count); //子Sprite数量小于要显示的数位时添加新的Sprite
};
初始化:
bool DigitSprite::init()
{
if (!Node::init())
return false;
SpriteFrameCache::getInstance()->addSpriteFramesWithFile(DIGIT_PLIST_PATH, DIGIT_PNG_PATH);
extendSpriteBatch(DEFAULT_DAMAGE_DIGIT);
setOpacity(255);
return true;
}
需要显示数字时:
void DigitSprite::showDigit(int value)
{
string num = to_string(value);
int avaSpriteCount = getChildrenCount();
int len = num.length();
if (len > avaSpriteCount)
extendSpriteBatch(len - avaSpriteCount);
for (int i = 0; i < len;i++) {
Sprite* sprite = (Sprite*)this->getChildByTag(i);
char cnum[10];
sprintf(cnum, NUMBER_SPRITE_NAME_TEMPLATE, num.at(len - i - 1));
SpriteFrame *spriteFrame = SpriteFrameCache::getInstance()->getSpr