iOS的Cocos2d-x工程载入CocoStudio制作的动画素材'xxx.csb/csd'文件,添加自定义用户头像图片到动画。

在Cocos2d-x工程载入CocoStudio制作的动画素材'xxx.csb'或'xxx.csd'文件只需要在scene文件如'HellowWorldScene.cpp'中的'bool HelloWorld::init()'方法中加入下方代码载入csb或者csd动画文件就可以。

//    //csb文件动画载入
//    auto rootNode = CSLoader::createNode("tmp.csb");
//    rootNode->setPosition(Vec2(visibleSize.width/2, visibleSize.height/2));
//    addChild(rootNode);
//    auto action = CSLoader::createTimeline("tmp.csb");
//    rootNode->runAction(action);
//    action->gotoFrameAndPlay(0, true);
    //csd动画文件载入
    auto node = CSLoader::getInstance()->createNodeWithFlatBuffersForSimulator("Node.csd");
    node->setPosition(Vec2(visibleSize.width/2, visibleSize.height/2));
    this->addChild(node);
    cocostudio::timeline::ActionTimeline* action = cocostudio::timeline::ActionTimelineCache::getInstance()->createActionWithFlatBuffersForSimulator("Node.csd");
    if (action)
    {
        node->runAction(action);
        action->gotoFrameAndPlay(0);
    }
Demo下载链接


如果遇到了"libpng error: CgBI: unhandled critical chunk"错误,如果使用的是Xcode 7.3+的版本,需要在工程的“Build Settings"下设置"Compress PNG Files"为"NO"和"Remove Text Metadata From PNG Files"为"NO",否则会出现无法打开图片的libpng的问题。参考"[Solved] libpng error: CgBI: unhandled critical chunk + Xcode 7.3",但是仅仅修改"Remove Text Metadata From PNG Files"为"NO"可能还无法解决问题,还需要修改"Compress PNG Files"。

添加自定义用户头像到动画

只需要在我们添加的cocos2d的node中通过tag值或者name值一层层寻找我们需要添加头像的那个child node。然后用我们需要添加的图片生成sprite node,添加到那个child node上即可。如果动画是重用的,记得每次添加自定义图片node时,删除之前添加的图片node。

代码如下:

void SatelliteScene::setIcon(Image* image1)
{
    auto head1 = node->getChildByTag(4);
    
    if(image1!=nil && head1!=nil){
        printf("head");
        auto texture = new Texture2D();
        texture->initWithImage(image1);
        texture->autorelease();
        auto icon = Sprite::createWithTexture(texture);
        icon->setScaleY(kSatelliteHeight/icon->getContentSize().height);
        icon->setScaleX(kSatelliteWidth/icon->getContentSize().width);
        icon->setRotation(13);
        icon->setPosition(179, 161);
        icon->setTag(6666);
        head1->removeChildByTag(6666);
        head1->addChild(icon);
    }
}

此外,当图片比较大,像素比较高时,在做UIImage转Image的时候会出现转换速度慢,系统卡顿。那么需要使用CGContext把UIImage的size减少,再做格式转换,最后添加cocos2d的node中。CGContext的操作需要在子线程中进行。而UIImage转Image尽量在主线程中进行,避免C++下的线程同步问题。


阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭