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

暂时不支持,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] - }

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

creator直接拖一张图片到Canvas就是默认GL_SRC_ALPHA和GL_ONE_MINUS_SRC_ALPHA

如果我赋值成GL_ONE和GL_ONE_MINUS_SRC_ALPHA,半透明区域正常,但是透明度渐变的时候会曝光,透明度变为0的时候还是可见的,只是曝光极限了

只有用creator创建的sprite存在这种现象,手动cc.Sprite:createWithSpriteFrameName并没有这种现象

能给一下你的 creator 工程和对应的 cocos2d-x 工程吗(cocos2d-x 的工程只需要 Classes 下的文件)?我怀疑是 alpha 预乘带来的问题。

好的,怎么发给你?

lua工程,不加载creator文件多分辨率是正常的,加载了creator的文件后多分辨率就有黑边或者超出屏幕,查看classes里面,CreatorReader::setup()为什么又设置了一遍分辨率?

私信给我吧。

Creator 会设置与分辨率相关的内容,所以 reader 会根据解析出来的内容设置分辨率适配以达到和 creator 一样的效果。

私信你了~

想问下,widget自动布局为什么不起作用?我想让一个ui里面的几个控件全部显示在屏幕内,所以给这几个控件挂在了widget组件,并设置了相对位置,但是运行时,我改变分辨率,并重新设置了这些控件的父节点的contentsize和屏幕尺寸一样,还是会有一些控件在屏幕外,看不到?是我哪里操作不对吗?

minggo你好,我们正在使用你的插件到实际项目,请予以协助(暂时遇到“需要导出资源到相对路径”等,另不知道如何发私信,抱歉)谢谢~~

发邮件给我吧:xiaoming.zhang@chukong-inc.com

README 里有说明了,布局目前不支持运行时动态调整。