Cocos Creator的C++和Lua支持:0.3版发布

接下来的计划主要就是完成 issue 里列出的功能,修复开发者报告的 bug。这几天没更新是因为同时也在忙 cocos2d-x 的事情。

大部分的功能都有了,最近没收到相关的 bug 反馈,所以就没急着更新了。

非常感谢开发团队的努力 希望能早日把prefab导出成node的计划列入日程

@minggo
导出的文件不存在bindings文件夹,例子工程我check几次都失败了是我哪里的操作方式不对?
ps:官方插件,还有 https://github.com/cocos2d/creator_to_cocos2dx 的 0.3版本 ap0版本 ap1 版本,我导出之后都没有bangding文件夹
操作平台:windows7 + cocoscreater1.7

http://cocos2d-x.org/docs/cocos2d-x/zh/editors_and_tools/creator_to_cocos2dx.html

请先参考一下这个文档,对于 C++ 的插件导出和使用有二次验证

我去,我一直以为是导出到一个路径下,然后再自己操作,谢谢!!!!!

register_creator_reader_module

register_creator_reader_manual(L);

函数名称错误 麻烦修改下

1赞

@minggo android.mk 怎么配置

我用的是 cocos2dx3.16 new的lua工程,win上编译通过,creater导出的secene 也能够显示,但是android.mk配置始终有问题,你能不能发一个模版出来呀

按照上面文档的操作不可以么?文档有提到android项目的lua头文件包含,具体问题发出来看看

大家好, 我目前使用在我的 c++ 项目。 发现了 glCall 跟原本使用studio时比较起来 高达快接近双倍。
从大约90+ glcalls(studio::CSLoader) 变 160+glcalls(creatorReader) ;

为何会变成如此的大?
请求协助。

creator导出到lua,CreatorReader导出的scene的分辨率貌似有点问题,在华为7X的机子,creator导出的scene两边留黑,但是直接代码添加一个精灵并设置x到diplay.width是可以完全显示到黑边上面的

是呀,我也有这个问题,渲染的数量太大了

这个插件可以把cocos creator 的场景导出来给cocos 2d-x 的js项目用吗?

暂时不支持,creator自带cocos2d-js的升级版,js开发者直接转creator是不是更方便?

现在可以单独导出prefa吗,就是获得一个node或者layer

GitHub仓库没看到这样的支持,了解最新的开发内容可以 fork 仓库cocos2d/creator_to_cocos2dx, 关注 [minggo/creator_to_cocos2dx_cpp]((https://github.com/minggo/creator_to_cocos2dx_cpp/tree/master)

CreatorReader中createSprite出来的sprite,sprite->getBlendFunc() 得到的src=3435973836, dst=3435973836,如果赋值creator中的默认值770和771,发光的半透明区域会变黑,不赋值就是正常的。不懂原因呀。

代码中直接创建sprite,getBlendFunc的src=1, dst=771

最好写 16 进制或者是宏的名字,直接写 10 进制 看不出来是什么意思。另外,麻烦贴一些对应的代码片段。

cocos2d::Sprite* CreatorReader::createSprite(const buffers::Sprite* spriteBuffer) const
{
    cocos2d::Sprite* sprite = cocos2d::Sprite::create();
    if (sprite)
        parseSprite(sprite, spriteBuffer);
    return sprite;
}

void CreatorReader::parseSprite(cocos2d::Sprite* sprite, const buffers::Sprite* spriteBuffer) const
{
    // order is important:
    // 1st: set sprite frame
    const auto& frameName = spriteBuffer->spriteFrameName();
    if (frameName)
        sprite->setSpriteFrame(frameName->str());

    
    // 2nd: node properties
    const auto& nodeBuffer = spriteBuffer->node();
    parseNode(sprite, nodeBuffer);


    // 3rd: sprite type
    const auto& spriteType = spriteBuffer->spriteType();
    switch (spriteType) {
        case buffers::SpriteType_Simple:
            sprite->setCenterRectNormalized(cocos2d::Rect(0,0,1,1));
            break;
        case buffers::SpriteType_Tiled:
            tileSprite(sprite);
            break;
        case buffers::SpriteType_Filled:
        case buffers::SpriteType_Sliced:
            break;
    }

    cocos2d::BlendFunc spBlendFunc = sprite->getBlendFunc();**//这里是src=3435973836, dst=3435973836**
    const auto& srcBlend = spriteBuffer->srcBlend(); **//这里是gl.SRC_ALPHA**
    const auto& dstBlend = spriteBuffer->dstBlend();**//这里是gl.ONE_MINUS_SRC_ALPHA**
    cocos2d::BlendFunc blendFunc;
    blendFunc.src = srcBlend;
    blendFunc.dst = dstBlend;
    sprite->setBlendFunc(blendFunc);

#if 0
    // FIXME: do something with these values
    const auto& isTrimmed = spriteBuffer->trimEnabled();
    const auto& sizeMode = spriteBuffer->sizeMode();
#endif
}

上面是CreatorReader.cpp中的
下面是lua中手动创建
local test = display.newSprite("#EF_dice_yxs_1.png"):addTo(self.m_scene):move(display.cx, display.cy)
dump(test:getBlendFunc(), “iffffffffffffff”)
结果是:

[LUA-print] - "iffffffffffffff" = {

[LUA-print] -     "dst" = 771

[LUA-print] -     "src" = 1

[LUA-print] - }

你是在哪里赋值的?为什么要这样赋值?