样例代码:
auto sprite1 = Sprite::create("test.png"); SpriteFrameCache::getInstance()->addSpriteFramesWithFile("res.plist"); auto sprite2 = Sprite::createWithSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("A.png")); sprite1->getSpriteFrame()->setTexture(nullptr); sprite2->getSpriteFrame()->setTexture(nullptr); addChild(sprite1); addChild(sprite2);
显示结果:sprite1正常显示,sprite2消失
原因是因为非图集创建的Sprite的_spriteFrame为nullptr,通过getSpriteFrame获取的只是一个临时对象,Sprite并没有引用,而且每次调用此函数都会重新创建对象。
不明白为什么要这样 希望能解释下
源码:
SpriteFrame* Sprite::getSpriteFrame() const { if(nullptr != this->_spriteFrame) { return this->_spriteFrame; } return SpriteFrame::createWithTexture(_texture, CC_RECT_POINTS_TO_PIXELS(_rect), _rectRotated, CC_POINT_POINTS_TO_PIXELS(_unflippedOffsetPositionFromCenter), CC_SIZE_POINTS_TO_PIXELS(_originalContentSize)); }
`