3.0加载csb cocos_cocos 2dx 3.2 lua加载csb - CSDN
  • 由于cocos2dx整套系统包含c++引擎、cocostudio、lua、javascript等许多内容,又分为2.0、3.0两套差别较大的版本,其中一种内容修改升级后,另外一部分没有及时更新上,就导致出现各种怪异的问题。 最近在使用最新的...

    由于cocos2dx整套系统包含c++引擎、cocostudio、lua、javascript等许多内容,又分为2.0、3.0两套差别较大的版本,其中一种内容修改升级后,另外一部分没有及时更新上,就导致出现各种怪异的问题。

    最近在使用最新的quick cocos3.3+cocostudio2.15+cocos ide1.2运行一个我以前开发的小程序时,发现载入csb格式的文件程序会直接崩溃。而用cocostudio新开发的一个最简单的csb文件同样会导致程序载入崩溃。windows和mac都有类似的问题。

    经过研究,发现cocostudio从2.1正式版开始,csb格式从protobuffer改为flatbuffer,C++引擎应当同步更新到3.4版了,但是quick cocos却没有及时跟上,仍然采用3.3的引擎,导致解析错误。在把cocostudio各版本都测试过的情况下,发现只有2.0.6版和2.1beta版才能使quick cocos3.3工作正常。

    另外,cocos ide1.2版同样和quick cocos3.3版有一些不兼容的地方,也需要特殊处理一下。

    综合上面各种情况,采用下面的解决方法

    1.使cocos ide 1.2可以正确的运行quick cocos 3.3的工程项目

    1)安装cocos ide 1.2 32位版
    2)安装quick cocos 3.3正式版,用它创建工程
    3)在cocos ide中导入工程
    4)运行一次,有可能启动不了
    5)用cocos ide创建一个quick cocos工程,把该工程目录中的.settings文件夹复制到原有工程中(Mac机下是隐藏文件)
    6)重启cocos ide,原有工程即可运行

    备注:因为用cocos ide 1.2创建的quick项目加载所有版本的csb文件都会出错,所以要采用quick cocos3.3直接创建项目,然后cocos ide导入项目的方法,如果不使用cocos ide开发就可以跳过这步

    2.把原有的cocostudio工程转为2.0.6或2.1beta的版本发布

    1)安装cocostudio 2.0.6或2.1beta
    2)将原有cocostudio工程加载到cocostudio 1.6或2.1beta重新发布
    3)把发布的内容放到工程的资源目录下


    这样就可以正确运行了


    此外,我用Mac下的cocostudio 2.1beta转换老的工程生成csb后仍然崩溃,但是直接重新建项目发布csb是正确的,估计是cocostudio转换的bug。最后把window下面转换好的csb文件直接复制到mac上正确运行。


    展开全文
  • 可惜现在项目使用的还是3.0版本,不支持csb解析,总不至于为了一个解析功能将整个库升级吧,这也太小题大做了。 因为这个csb文件只是将明文的*.ExportJson文件变成二进制的,我猜测只是文件解析略有不同,其他使用...

    让cocos2d-x 3.0读取cocostudio中的csb文件

        ​  现在cocostudio的功能越来越完善,还支持导出二进制的csb文件。可惜现在项目使用的还是3.0版本,不支持csb解析,总不至于为了一个解析功能将整个库升级吧,这也太小题大做了。因为这个csb文件只是将明文的*.ExportJson文件变成二进制的,我猜测只是文件解析略有不同,其他使用都无须改变,所以现在我现在的思路是仅替换文件解析的类。


     以一个骨骼动画为例(项目资源和源码在文章下面下载),3.0中加载并播放一个骨骼动画的代码是:

        ArmatureDataManager::getInstance()->addArmatureFileInfo("DemoPlayer.ExportJson");
        auto arm = Armature::create("DemoPlayer");
        this->addChild(arm);
        arm->setPosition(Point(300, 300));
        arm->getAnimation()->play("walk");
        // 一般放在onExit或析构中
        ArmatureDataManager::destroyInstance();

     可以看出,第一行就是加载ExportJson文件,但如果换成"DemoPlayer.csb"打开出错,为什么呢?前面已经说过,3.0不支持了=。=!!


    废话太多了。。。下面是详细步骤:

    1 复制源码:跟进addArmatureFileInfo()可以发现CCS资源的解析是由DataReaderHelper类提供的,因此从3.2的cocos/editor-support/cocostudio目录下复制CCDataReaderHelper和CocoLoader源文件(.h和.cpp)共四个文件到3.0的cocos/editor-support/cocostudio目录下替换掉原来文件。


    2 然后在工程中将CocoLoader.h和CocoLoader.cpp添加到cocostudio目录中:


    3 修改CCDataReaderHelper.cpp中的错误。

           (1) 头文件路径不一样,去除"base/"。如#include "base/CCDirector.h"改为#include "CCDirector.h",把下面两个CCScheduler.h和ccUtils.h路径也改了。

           (2) 将Vec2类名改称Point,共两处,仔细看报错。(3.2中Point类名又被改成Vec2了,可怜的Point又一次被改名了。。。)

           (3) CCDataReaderHelper.cpp还有十几处Use of undeclared identifier 'utils'错误,这是因为3.0扩展了ccUtils.h,增加了几个新功能,修改方法见第4条。


    4 跟进ccUtils.h中,也可以直接在cocos/2d/support目录下找到。

           (1) 在.h中加入以下头文件:

    	   #include <vector>
    	   #include <string>
    	<span style="color:#FF0000;"><strong>   </strong></span>#include "2d/CCNode.h"
    	<span style="color:#FF0000;"><strong>   </strong></span>#include "ccMacros.h"

              (2) 在.h的cocos2dx命名空间内加入以下代码:
    		    namespace utils
    		    {
    		        double atof(const char* str);
    		    }
    
              (3) 在.cpp的cocos2dx命名空间内加入以下代码:
    	       	    namespace utils
    			{
    			#define MAX_ITOA_BUFFER_SIZE 256
    			    
    			    double atof(const char* str)
    			    {
    			        if (str == nullptr)
    			        {
    			            return 0.0;
    			        }
    			        
    			        char buf[MAX_ITOA_BUFFER_SIZE];
    			        strncpy(buf, str, MAX_ITOA_BUFFER_SIZE);
    			        
    			        // strip string, only remain 7 numbers after '.'
    			        char* dot = strchr(buf, '.');
    			        if (dot != nullptr && dot - buf + 8 <  MAX_ITOA_BUFFER_SIZE)
    			        {
    			            dot[8] = '\0';
    			        }
    			        
    			        return ::atof(buf);
    			    }
    			    
    			}


    5 至此就大功告成了,但是如果仍报CocoLoader与CCDataReaderHelper的链接错误,那么需要手动在"cocos2dx IOS"的"Build Phases"上手动添加CocoLoader的.h和.cpp文件。下面给出添加步骤:

    (1) 选择项目目录下的"cocos2d_libs.xcodeproj",在右边"build all libs iOS"下面的"cocos2dx iOS"库(如果要在Mac上运行,则选择"build all libs Mac"下面的"cocos2dx iOS"库),再选中右边的"Build Phases"。如下图:


            (2) 点开"Compile Headers",再点击"+"号,添加CocoLoader.h进去,此时h文件应该是(356 items)


           (3) 点开"Compile Sources",再点击"+"号,添加CocoLoader.cpp进去,此时cpp文件应该是(301 items)



    现在应该可以编译并运行csb文件了,将DemoPlayer.ExportJson改成DemoPlayer.csb运行了看看吧!
        ArmatureDataManager::getInstance()->addArmatureFileInfo("DemoPlayer.csb");
        
        auto arm = Armature::create("DemoPlayer");
        this->addChild(arm);
        arm->setPosition(Point(300, 300));
        arm->getAnimation()->play("walk");
        // 一般放在onExit或析构中
        ArmatureDataManager::destroyInstance();



     
    所使用的资源下载:项目资源
    所使用的源码下载:项目源码
    展开全文
  • 今天主要自学了一下如何使用cocostudio以及加载csb文件、获取csb中的节点 注意Text,Button这类控件属于ui里的 所以要引入ui/CocosGUI.h头文件 并且如果不想每次都打cocos2d::ui::Xxxxx的话 记得要加using ...

    今天主要自学了一下如何使用cocostudio以及加载csb文件、获取csb中的节点

    注意Text,Button这类控件属于ui里的 所以要引入ui/CocosGUI.h头文件

    并且如果不想每次都打cocos2d::ui::Xxxxx的话 记得要加using namespace ui;命名空间

    .h代码如下:

    #include "cocos2d.h"
    #include "ui/CocosGUI.h"
    
    USING_NS_CC;
    
    class LoadCsb : public Layer{
    public:
    	virtual bool init();
    	static Scene* createScene();
    	CREATE_FUNC(LoadCsb);
    public:
    	virtual void update(float dt);
    	void resetLoadingBar();
    private:
    	Sprite* _skill_1;
    	Sprite* _skill_2;
    	Sprite* _skill_3;
    	Sprite* _skill_4;
    	int count;
    	cocos2d::ui::Button* _reset_loading_bar;
    	cocos2d::ui::Text* _txt_current_hp = nullptr;
    	cocos2d::ui::LoadingBar* _hp;
    };


    .cpp代码如下:

    bool LoadCsb::init(){
    	if (!Layer::init()){
    		return false;
    	}
    
    	Node* node = CSLoader::createNode("ccs/UseCsd.csb");
    	this->addChild(node);
            _skill_1 = dynamic_cast<Sprite*>(node->getChildByName("skill_1"));
            _reset_loading_bar = dynamic_cast<Button*>(node->getChildByName("reset_loading_bar"));
    	_txt_current_hp = dynamic_cast<Text*>(node->getChildByName("txt_current_hp"));
    	_hp = dynamic_cast<LoadingBar*>(node->getChildByName("loading_bar"));
    	return true;
    }


    展开全文
  • COCOS2DX 3.0 优化提升渲染速度 Auto-batching 最近在看COCOS2DX 3.0的Auto-batching合批与Auto Culling动态缩减功能下面就来仔细看看吧:整合好的渲染提速干货: 简介 在游戏的绘制渲染中,往往消耗很多资源和...
    COCOS2DX 3.0 优化提升渲染速度 Auto-batching
    最近在看COCOS2DX 3.0的Auto-batching合批与Auto Culling动态缩减功能下面就来仔细看看吧:整合好的渲染提速干货:

    简介

    在游戏的绘制渲染中,往往消耗很多资源和内存,当绘制精灵数量越多,游戏的卡顿会很明显,为了优化和提升渲染效率。Cocos2d-x为我们提供了Auto-batching和SpriteBatchNode。

    Auto-batching 意思是Renderer将多次draw的调用打包成一次big Draw 调用。(又名批处理)。

    SpriteBatchNode 主要用于批量绘制精灵提高精灵的绘制效率的,需要绘制的精灵数量越多,效果越明显。

    Auto-batching

    在3.0版本实现了引擎的逻辑代码与渲染代码的分离,实现了Auto Batch与Auto Culling功能。不再推荐使用SpriteBatchNode提高精灵的绘制效率。

    Auto-culling的支持,Sprite在绘制时会进行检查,超出屏幕的不会发给渲染。

    Auto-batching的渲染流程

    现在,一个渲染流程是这样的:

    (1)drawScene开始绘制场景

    (2)遍历场景的子节点,调用visit函数,递归遍历子节点的子节点,以及子节点的子节点的子节点,以及…

    (3)对每一个子节点调用draw函数

    (4)初始化QuadCommand对象,这就是渲染命令,会丢到渲染队列里

    (5)丢完QuadCommand就完事了,接着就交给渲染逻辑处理了。

    (6)是时候轮到渲染逻辑干活干活,遍历渲染命令队列,这时候会有一个变量,用来保存渲染命令里的材质ID,遍历过程中就拿当前渲染命令的材质ID和上一个的材质ID对比,如果发现是一样的,那就不进行渲染,保存一下所需的信息,继续下一个遍历。好,如果这时候发现当前材质ID和上一个材质ID不一样,那就开始渲染,这就算是一个渲染批次了。


    (7) 因此,如果我们创建了10个材质相同的对象,但是中间夹杂了一个不同材质的对象,假设它们的渲染命令在队列里的顺序是这样的:2个A,3个A,1个B,1个A,2个A,2个A。那么前面5个相同材质的对象A会进行一次渲染,中间的一个不同材质对象B进行一次渲染,后面的5个相同材质的对象A又进行一次渲染。一共会进行三次批渲染。

    SpriteBatchNode

    它是批处理绘制精灵,主要是用来提高精灵的绘制效率的,需要绘制的精灵数量越多,效果越明显。因为cocos2d-x采用opengl es绘制图片的,opengl es绘制每个精灵都会执行:open-draw-close流程。而SpriteBatchNode是把多个精灵放到一个纹理上,绘制的时候直接统一绘制该texture,不需要单独绘制子节点,这样opengl es绘制的时候变成了:open-draw()-draw()…-draw()-close(),节省了多次open-close的时间。SpriteBatchNode内部封装了一个TextureAtlas(纹理图集,它内部封装了一个Texture2D)和一个Array(用来存储SpriteBatchNode的子节点:单个精灵)。注意:因为绘制的时候只open-close一次,所以SpriteBatchNode对象的所有子节点都必须和它是用同一个texture(同一张图片)。

    在addChild的时候会检查子节点纹理的名称跟SpriteBatchNode的是不是一样,如果不一样就会出错。

    // check Sprite is using the same texture id

    CCASSERT(sprite->getTexture()->getName() == _textureAtlas->getTexture()->getName(), "CCSprite is not using the same texture id");


    SpriteBatchNode和SpriteFrameCache结合使用代码示例

    必须保证SpriteFrameCache和SpriteBatchNode加载的是同一纹理贴图。


    SpriteBatchNode vs. Auto-batching

    在3.0版本中提供了新的渲染机制,实现引擎逻辑代码和渲染的分离。该版本依然支持SpriteBatchNode,和以前的版本保持一致。但是不再推荐使用SpriteBatchNode。

    Auto-culling的支持,Sprite在绘制时会进行检查,超出屏幕的不会发给渲染。

    使用Auto-batching

    ·需确保精灵对象拥有相同的TextureId(精灵表单spritesheet);

    ·确保他们都使用相同的材质和混合功能

    ·不再把精灵添加SpriteBatchNode上

    ·避免打乱QuadCommand队列

    Auto-batching拥有更好的性能提升。

    下面通过代码来分析几种符合Auto-batching使用的情况

    1、使用同一图片生成精灵,加到场景中。此种情况最简单,就是重复添加同一个精灵。 由于满足Auto-batching的条件。此时的渲染批次为2.(首先,即使我一个精灵也不创建,渲染批次也至少是1,加上刚刚这重复添加的精灵的渲染)



    2、使用精灵帧表单,加载生成添加不同的精灵。但是各个精灵的材质都是一样的,满足Auto-batching的条件。此时的渲染批次为2.(首先,即使我一个精灵也不创建,渲染批次也至少是1,加上刚刚这重复添加的精灵的渲染)


    在实际使用中推荐使用这种方式。


    3、此种情况假设在不同的zOrder下添加不同的精灵,在遍历子节点之前,其实还偷偷做了一件事情,那就是,调用sortAllChildren();函数对子节点进行排序,虽然重复添加不同材质生成的精灵,但是它们的zOrder不一样,根据zOrder,Auto-batching渲染命令被重新排序,根据材质相同加入渲染队列从而降低了渲染次数。


    如果注释掉sprite2->setZOrder(1);你会发现渲染批次会升高。

    展开全文
  • 首先导入头文件 #include "cocostudio/CocoStudio.h"#include "ui/CocosGUI.h" 导入csb文件 auto rootNode = CSLoader::createNode("MainScene.csb"); addChild(rootNode);
  • 我们知道,cocos支持大部分的动画,包括spine,plist,以及通过studio制作生成的csd动画,本文主要谈谈在C++代码中如何播放通过studio制作完成的csd动画。 1.studio中,动画的制作支持的比较完善,可以是帧动画,...
  • 其中学习到配合Cocos Studio设计UI并加载一节时,由于书中使用的是Cocos2d-x版本是3.0,我使用的是3.6,CocosStudio书中的版本是1.4,而现在的版本是2.3,所以发布资源的格式有所改变,默认发布的资源格式是csb,co....
  • cocos3.0 从main.lua开始

    2015-04-20 11:59:53
    Main.lua是Cocos2d-lua项目的默认入口,即项目启动时,首先执行这个文件。(我们也可以修改config.json文件的entry字段来配置入口文件) main.lua中进行了几项操作: a) 把res和src两个文件夹添加到文件搜索路径。...
  • 可以在cocos2d.cpp中查看2d-x的版本信息。 版本对应列表: Studio2.x CocosStudio版本 对应Cocos2d-x版本 JS版本 备注 v2.1.5 v2.1.2beta v2.1 (事件:更名Cocos) v3.4final v3.3 rc0+ Cocos新增JSON格式导出,...
  • 初学cocos2dx,跟着《Cocos2d-x 3.x游戏开发之旅》学习 本人使用的是Cocosdx3.17,所以会因版本不同会有些出入, ...网上的资源实在是太匮乏了,很多都是老版本的教程,终于在我快要放弃准备重新下载Cocos2dx3.0的...
  • 在本次做毕业设计过程中,cocos studio2.0版本试用了下,导入代码啥的倒是便捷,csb唯一需要注意的是目录问题,哪怕加载csb文件时已经写了目录,也需要在代码中通过setSearchPaths添加该文件目录,否则会找不到资源...
  • cocos2dx学习笔记之帧动画详解
  • 此篇主要作者:jason-lee-lijunlin 基于Cocos2d-x引擎进行封装的UI框架的扩展包。 此文章Himi已经仔细看过,总体来说是篇很好的文章,是给使用-x引擎的童鞋们的福利~。真的非常感谢作者的分享,近两年 Himi看到了...
  • Cocos在更新到2.x版本之后,便没有了骨骼动画的功能,使得开发者非常困扰。终于在本次更新中,Cocos编辑器将骨骼动画添加了回来!(注:新版本骨骼动画需要Cocos2d-x3.8版本) 骨骼动画与序列帧动画 序列帧...
  • 由于Cocos2d-x3.x的代码和各种乱七八糟的系统实在是混乱,所以笔者最近在研究Cocos2d-x 2.x。网上现在关于2.x的教程着实不多了,又因为Cocos引擎各版本都互相不兼容,所以贴一下Cocos2d-x 2.x与Cocos Studio1.x的...
  • 最新版本:x-studio10.0.5900.509(2020年1月9日更新) ... ... x-studio是一款强大的游戏开发IDE;由作者历时5年业余时间精心打造和雕琢,软件倾注了作者的灵魂;具有的完整2D粒子编辑功能,场景(UI)编辑功能,屏幕适配...
  • Cocos2d-x 3.8.1+Cocos Studio 2.3.2捉虫记之控制场景文件中的骨骼动画 引子 这段时间一直努力在把早期版本的拇指接龙游戏(Cocos2d-x 2.2.3+CocoStudio 1.4.0.1)升级到当前相对稳定的高大上环境——Cocos2d-x ...
1 2 3
收藏数 41
精华内容 16
关键字:

3.0加载csb cocos