【问题标题】:How to change Sprite texture in cocos2dx C++ v3.10?如何在 cocos2dx C++ v3.10 中更改 Sprite 纹理?
【发布时间】:2016-04-03 18:29:42
【问题描述】:

我正在使用这个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);
    }

实际上,我是从图库中获取 Texture 2D 对象并将其设置在精灵上。 这段代码很好用,但是如果我想替换精灵纹理,那么再次执行相同的代码并添加一个新的剪辑节点对象,并且在前一个上添加一个新的精灵......

我想知道如何解决这个问题?从图库中选择新照片时,我想用新的精灵纹理替换旧的精灵纹理。

提前致谢!

【问题讨论】:

    标签: c++ cocos2d-x cocos2d-x-3.0 cocos2d-x-3.x


    【解决方案1】:

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

    【讨论】:

    • 哦,原来如此简单!有趣的是,我们的大脑如何在压力下停止工作..lol 非常感谢!欢呼它现在完美运行
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-19
    • 2014-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多