Quick-Cocos2dx-Community

cocos2d-x 4.0 captureNode用法备份

-- 截取场景
cc.utils:captureNode(scene, function(image)
    -- 图片转纹理
    local texture = cc.Texture2D:new()
    texture:initWithImage(image)
    image:release()
    -- 纹理创建精灵
    local sp = cc.Sprite:createWithTexture(texture)
    sp:addTo(scene):center()
end)

Cocos2d-x fgui坑点

Component 挂事件监听不遵循传播规则,总可以收到监听,透明区域的点击判断需要一个单独的透明图形来挂监听器。
GList不能挂事件监听,不然GList滚动行为不正常。

Cocos2d-x Tiled 纹理抖动和黑线

  1. 纹理 texture->setAliasTexParameters() 是可以防止黑线,但是移动地图的时候纹理抖动,
    并且正常地图依然都移动出现黑线的记录,只是变小了。
  2. 精灵渲染开fixArtifacts防止黑线,配合纹理的setAntiAliasTexParameters,画面也不会抖动。
    此方法适用于不缩小的地图。
  3. 限制摄像机移动?https://blog.csdn.net/gongyiling3468/article/details/47803619/

Cocos2d-Lua-Community 4.0.1 Beta

测试稳定后发布到http://www.cocos2d-lua.org

总揽

在4.0.0发布以来,进过了大量的改进。FairyGUI的支持上踩了大量的坑:绑定补全、hitTest、富文本的支持、window的事件封装等等。Spine的3.8运行时也有大量的改进,进行了同步。新加了Linux的支持个测试,修正了一些问题,但还遗留了EditBox这个已知坑点。加入了AsyncTCP,文档后补吧。TiledMap继续进行功能支持改进。

阅读全文»

cocos2d-x 从离散图片创建帧

local sharedTextureCache = cc.Director:getInstance():getTextureCache()
local sharedSpriteFrameCache = cc.SpriteFrameCache:getInstance()

local imgs = {'14392.PNG', '14393.PNG', '14394.PNG', '14395.PNG'}
for _, img in ipairs(imgs) do
    local tx = sharedTextureCache:addImage(img)
    local rect = tx:getContentSize()
    rect.x = 0
    rect.y = 0
    local frame = cc.SpriteFrame:createWithTexture(tx, rect)
    sharedSpriteFrameCache:addSpriteFrame(frame, img)
end

local frames = display.newFrames("%d.PNG", 14392, 4)
dump(frames)

cocos2d-x lua中使用协程的坑

coroutine.resume 会使用coroutine.create创建的lua_state进行执行,导致to_lua的绑定代码的L会混乱。一些回调函数的执行会破坏参数。

要使用协程,建议coroutine.create中的逻辑无任何to_lua的绑定代码执行。

TexturePacker 命令行自动打包

需求:自动打包文件夹下的所有图片,如果超单纹理大小,自动拆分为多个文件。

TexturePacker  --multipack --texture-format png --format cocos2d --max-width 2048 --max-height 2048 --data {n}.plist --sheet {n}.png /target/rootDirOfPng

注意:rootDirOfPng不会被加入帧名,旗下的二级目录会加入。

fairyGUI cocos2d-x 运行时坑点总结

  1. 多摄像机支持不完整,慎用自定义摄像机渲染fairyGUI
    cameraMask实现不完整。类似Button的容器,内部有多个GObject,但是设置cameraMask只会设置到当前渲染的GObject的displayObject,其它状态的设置不到,异常尴尬。即使修正了setCameraMask,也会GComponent::hitTest的事件分发判断也是不可修正的,fairyRoot分发事件,但是fairyRoot永远是default摄像机,不能引用引擎currentCamera,导致hitTest不能正确判断点击区域。
  2. GList的setVirtualAndLoop之后,顺序有问题,可如下修正。但是循环滚动位置错乱的问题没有定位到原因。

    void GList::removeChildrenToPool(int beginIndex, int endIndex)
    {
        if (endIndex < 0 || endIndex >= _children.size())
            endIndex = (int)_children.size() - 1;
    #if 1
        // fix item order: returnToPool() use push, and getObject() use pop, the order will broken
        for (int i = endIndex; i >= beginIndex; --i)
            removeChildToPoolAt(i);
    #else
        // backup old codes
        for (int i = beginIndex; i <= endIndex; ++i)
            removeChildToPoolAt(beginIndex);
    #endif
    }