Display.addSpriteFrames的异步加载bug

display.addSpriteFrames 使用异步加载

if async then
        asyncHandler = function()
            local texture = sharedTextureCache:getTextureForKey(image)
            assert(texture, string.format("The texture %s, %s is unavailable.", plistFilename, image))
            sharedSpriteFrameCache:addSpriteFrames(plistFilename, texture)
            handler(plistFilename, image)
        end
    end


```


sharedSpriteFrameCache:addSpriteFrames(plistFilename, texture)  这里的texture 应该改成image

这里应该是没有问题的啊

— Begin quote from ____

引用第1楼阳光七月于2014-09-12 11:29发表的 :
这里应该是没有问题的啊 http://www.cocoachina.com/bbs/job.php?action=topost&tid=228470&pid=1052278

— End quote

v3版本 我用preloadframework的话,传cb进去,就报错

不使用preloadframework 提示那个参数应该穿string,不是纹理对象, 改成image之后正常了

framework代码有改动,还没更新到zip文件里去。
你说的那个错误提示,是cocos2dx 3.0绑定代码里的bug,这里传string和纹理都是可以的,但传纹理时会有一个错误提示,实际是执行成功了的。

— Begin quote from ____

引用第3楼阳光七月于2014-09-12 11:56发表的 回 2楼(godstory) 的帖子 :
framework代码有改动,还没更新到zip文件里去。
你说的那个错误提示,是cocos2dx 3.0绑定代码里的bug,这里传string和纹理都是可以的,但传纹理时会有一个错误提示,实际是执行成功了的。 http://www.cocoachina.com/bbs/job.php?action=topost&tid=228470&pid=1052331

— End quote

那这里如果不传texture, 而是传image进去的话,是不是还会再加载一遍纹理,只能传texture才能起到异步加载的作用?

传文件名的话,会检查是否已经加载过,如果已经加载,会直接使用加载后得到的纹理。所以传文件名比起传texture只多一个查询的步骤。

— Begin quote from ____

引用第5楼阳光七月于2014-09-18 10:09发表的 回 4楼(godstory) 的帖子 :
传文件名的话,会检查是否已经加载过,如果已经加载,会直接使用加载后得到的纹理。所以传文件名比起传texture只多一个查询的步骤。 http://www.cocoachina.com/bbs/job.php?action=topost&tid=228470&pid=1057592

— End quote

那这个查询的开销大吗?
有些节点我在移除的时候调用 CCSpriteFrameCache:removeUnusedSpriteFrames(),下次创建它的时候,如果不做判断重复全加载一遍文件,这样做会不会影响性能?

还有就是用addSearchPath() 设置多个查找路径,对性能影响多大,比如我把自定义字体文件的路径和一些常用资源路径都加进来

这是个表的查询,如果数量大的话可能会有些影响。但通常情况下,这里应该不会是瓶颈所在,因为C代码的运行效率还是较高的。addSearchPath也是一样。
以上只是经验上的估计,如果要有准确的结论,还是需要进行性能测试。

:7:明白了,感谢七月的耐心解答