Как изменить текстуру Sprite в cocos2dx C ++ v3.10?

Я использую это https://github.com/qiankanglai/ImagePicker Утилита ImagePicker Я использую этот код для установки текстуры спрайта:

 void HelloWorldScene::didFinishPickingWithResult(cocos2d::Texture2D* result)
{
Size visibleSize = Director::getInstance()->getVisibleSize();
Vec2 origin = Director::getInstance()->getVisibleOrigin();
if(result == nullptr){
return;
}
// sprite->removeFromParentAndCleanup(true);

ClippingNode * clipper = ClippingNode::create();
clipper->setPosition(visibleSize.width / 2, visibleSize.height / 2);
clipper->setTag( kTagClipperNode );
this->addChild(clipper);
DrawNode * stencil = DrawNode::create();
stencil->drawSolidCircle(Vec2(clipper->getBoundingBox().size.width / 2, clipper->getBoundingBox().size.height / 2), 100, 0, 200, Color4F::MAGENTA);
clipper->setStencil(stencil);
clipper->setInverted(false);
auto sprite = cocos2d::Sprite::createWithTexture(result);
sprite->setPosition( Vec2(clipper->getContentSize().width / 2, clipper->getContentSize().height / 2));
clipper->addChild(sprite);
this->addChild(clipper);
}

на самом деле я получаю 2D-объект текстуры из галереи и устанавливаю его на спрайт.
Этот код прекрасно работает, но если я хочу заменить текстуру спрайта, тогда тот же код выполняется снова, и добавляется новый объект узла отсечения, а также новый спрайт поверх предыдущего …

Я хочу знать, как я могу решить эту проблему? Я хочу заменить старую текстуру спрайта новой текстурой при выборе новой фотографии из галереи.

Заранее спасибо!

1

Решение

Sprite имеет функцию-член setTexture в cocos2dx 3.0. Если у вас есть указатель члена на объект sprite в вашей сцене, вы можете обновить свою функцию следующим образом:

void HelloWorldScene::didFinishPickingWithResult(cocos2d::Texture2D* result)
{
if(result == nullptr){
return;
}
if(m_sprite)
{

m_sprite->setTexture(result);
}
else
{
Size visibleSize = Director::getInstance()->getVisibleSize();
Vec2 origin = Director::getInstance()->getVisibleOrigin();
ClippingNode * clipper = ClippingNode::create();
clipper->setPosition(visibleSize.width / 2, visibleSize.height / 2);
clipper->setTag( kTagClipperNode );
this->addChild(clipper);
DrawNode * stencil = DrawNode::create();
stencil->drawSolidCircle(Vec2(clipper->getBoundingBox().size.width / 2, clipper->getBoundingBox().size.height / 2), 100, 0, 200, Color4F::MAGENTA);
clipper->setStencil(stencil);
clipper->setInverted(false);
m_sprite = cocos2d::Sprite::createWithTexture(result);
m_sprite->setPosition( Vec2(clipper->getContentSize().width / 2,clipper->getContentSize().height / 2));
clipper->addChild(m_sprite);
this->addChild(clipper);
}
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]