Cocos2d-x:如何动态替换精灵

Cocos2d-x: How to replace sprite dynamically?

本文关键字:动态 替换 精灵 何动态 Cocos2d-x      更新时间:2023-10-16

我正在努力将我选择的精灵替换为另一个精灵。

这是我到目前为止得到的:

void Object::replaceSprite(const string & resourceName)
{
    cocos2d::SpriteFrameCache * spriteFrameCache = cocos2d::SpriteFrameCache::getInstance();
    cocos2d::SpriteFrame * spriteFrame = spriteFrameCache->getSpriteFrameByName(resourceName);
    //mSprite->setTexture(spriteFrame->getTexture());
    //mSprite->setDisplayFrame(spriteFrame);
    mSprite->setSpriteFrame(resourceName);
}

如您所见,我尝试了不同的方法,但没有一种奏效。

另外,我想

问一下,一旦我把框架更换到场景中,我是否必须再次添加精灵?我现在的想法是每次我要求用新精灵替换它时创建一个新精灵。但我不知道是否有更优雅和有效的方法来做到这一点。

谢谢!

setSpriteFrame 接受字符串或 SpriteFrame* 作为参数

在您的代码中

mSprite->setSpriteFrame(resourceName);

参数是一个字符串,你不需要从frameCache中获取帧,但你必须确保帧存在于frameCache中。

你可以在函数中做断点,并在之后检查spriteFrame是否为nullptr

cocos2d::SpriteFrame * spriteFrame = spriteFrameCache->getSpriteFrameByName(resourceName);