2016-04-03 68 views
1

我用这https://github.com/qiankanglai/ImagePicker ImagePicker工具,我用这个代码来设置精灵质地:如何更改cocos2dx C++ v3.10中的Sprite纹理?

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); 
    } 

其实我正从画廊的纹理二维对象和设置它的精灵。 此代码很好,但如果我想要替换精灵纹理,然后再次执行相同的代码,并添加一个新的裁剪节点对象,并在前一个新的精灵...

我想知道如何我可以解决这个问题吗?我想从画廊中选择一张新照片时,用新的prite纹理替换旧的sprite纹理。

在此先感谢!

回答

0

Sprite在cocos2dx 3.0中有一个名为setTexture的成员函数。如果你在场景中有一个指向精灵对象的成员指针,你可以更新你的函数如下:

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

哦,那多么容易!有趣的是我们的大脑如何在压力下停止工作..大声笑感谢这么多人!现在欢呼它完美的作品 –