zoukankan      html  css  js  c++  java
  • CocoStudio基础教程(4)骨骼动画的动态换肤

    1、概述

        游戏中人物的状态会发生改变,而这种改变通常要通过局部的变化来表现出来。比如获得一件装备后人物形象的改变,或者战斗中武器、防具的损坏等。这些变化的实现就要通过动态换肤来实现。

    2、运行到程序

        运行脚本,创建一个新项目。将导出文件复制到Resource中。

        修改init的代码:

    bool HelloWorld::init()  
    {  
        //////////////////////////////  
        // 1. super init first  
        if ( !Layer::init() )  
        {  
            return false;  
        }  
          
        Size visibleSize = Director::getInstance()->getVisibleSize();  
        Point origin = Director::getInstance()->getVisibleOrigin();  
      
        ArmatureDataManager::getInstance()->addArmatureFileInfo("changeShape.ExportJson");  
      
        Armature* arm = Armature::create("changeShape");  
        arm->setPosition(Point(visibleSize.width/2,visibleSize.height/2));  
        arm->setTag(1);  
        addChild(arm);  
        arm->getAnimation()->play("go");  
        
        setTouchEnabled(true);  
        return true;  
    }  

    3、添加与更换皮肤

         添加皮肤方式分动态添加与静态添加两种。动态添加是指在编辑器中更改,这样可以不需要重新编译程序。静态添加则是将其写死在程序中,通常这种做法不推荐,但我们也应该会使用。更换的做法是我们首先要取到具体的骨骼,然后更改它显示的“皮肤”。

        3.1动态添加

        在“动画编辑”的模式下选中我们的武器。然后将我们需要更换的武器资源依次拖动到“渲染资源”中。点开下拉列表,我们能看到添加过的资源,右击也可以删除。

    添加好后,保存并导出,在工程中,我创建了一个int的成员变量displayIndex。并在init中初始化为0。接下来我们加入点击响应来更换皮肤。

    void HelloWorld::onTouchesEnded(const std::vector<Touch*>&  touches, Event* event)  
    {  
        ++displayIndex;  
        displayIndex = (displayIndex) % 4;  
        ((Armature*)getChildByTag(1))->getBone("weapon")->changeDisplayByIndex(displayIndex, true);  
    } 

        3.2静态添加

        使用静态添加有一点要注意:要保证创建的资源已经导出了。我们在init中添加:

    //……  
        Skin* skin = Skin::createWithSpriteFrameName("sliderProgress.png");  
        arm->getBone("weapon")->addDisplay(skin, 4);  
    //……  

    并将点击响应中循环量从4更改为5,编译运行即可看到效果。

    4、总结

        创建皮肤分为动态和静态两种形式。动态是将相应的资源直接导出。静态则是要写到代码中进行创建。虽然这种也是动态创建,但相较于json配置,我还是倾向于称它为“静态”。叫什么不重要,哪种方便用哪种。换肤则都是要取到对于的骨骼,然后更改显示。

  • 相关阅读:
    iPhone开发应用Sqlite使用手册
    2.23 Apps must follow the iOS Data Storage Guidelines or they will be rejected
    跨浏览器(IE/FF/OPERA)JS代码小结
    c#一次数据库查询,JS实现内容分页
    oracle PLSQL /sqlserver2005基本操作对比
    SqlParameter构造函数的临界边缘
    SQL SERVER 2005分页存储过程
    *自创*可变长度随机数字/字母的生成小结(针对文件上传及验证码)
    Visual Source Safe连接数据文件图解 解决密码缓存问题
    [Ubuntu] Invalid command 'VirtualDocumentRoot', perhaps misspelled or defined by a module not included in the server configuration
  • 原文地址:https://www.cnblogs.com/damowang/p/4835937.html
Copyright © 2011-2022 走看看