quick-cocos2d-x的热更新机制实现<五>对 framework 的修改
来源:互联网 发布:设计模式 java的使用 编辑:程序博客网 时间:2024/05/16 11:51
原文地址:http://www.cocoachina.com/bbs/read.php?tid=213061
5 对 framework 的修改
5.1 写一个 getres 方法
ures 中包含的就是所有素材的索引(键值对)。形式如下:
- 键名:res/pic/init_bg.png
- 键值(lres中): res/pic/init_bg.png
- 键值(ures中):/Users/zrong/Library/Application Support/iPhone Simulator/7.1/Applications/2B46FAC0-C419-42B5-92B0-B06DD16E113B/Documents/res/pic/init_bg.png
复制代码
- display.newSprite("pic/init_bg.png")
或者干脆简化成了:
复制代码
- display.newSprite("init_bg.png")
要上面的代码能够工作,需要为 CCFileUtils 设置搜索路径:
复制代码
- CCFileUtils:sharedFileUtils:addSearchPath("res/")
- CCFileUtils:sharedFileUtils:addSearchPath("res/pic/")
但是,在这套更新机制中,我不建议设置搜索路径,因为素材都是以完整路径格式保存的,这样使用起来更方便和更确定。
如果是新项目,那么挺好,我只需要保证素材路径基于 res 提供即可,类似这样:
复制代码
- display.newSprite("res/pic/init_bg.png")
但是对于已经开发了一段时间的项目来说,一个个改就太不专业了。这是我们需要扩展一个 io.getres 方法:
复制代码
- res = {}
- function io.getres(path)
- print("io.getres originl:", path)
- if CCFileUtils:sharedFileUtils():isAbsolutePath(path) then
- return path
- end
- if res[path] then return res[path] end
- for key, value in pairs(finalRes.oth) do
- print(key, value)
- local pathInIndex = string.find(key, path)
- if pathInIndex and pathInIndex >= 1 then
- print("io.getres getvalue:", path)
- res[path] = value
- return value
- end
- end
- print("io.getres no get:", path)
- return path
- end
然后,我们需要修改 quick framework 中的display模块让我们的旧代码不必进行任何改动就能生效。
5.2 修改 display.newSprite
找到该方法中的这个部分:
复制代码
- if string.byte(filename) == 35 then -- first char is #
- local frame = display.newSpriteFrame(string.sub(filename, 2))
- if frame then
- sprite = spriteClass:createWithSpriteFrame(frame)
- end
- else
- if display.TEXTURES_PIXEL_FORMAT[filename] then
- CCTexture2D:setDefaultAlphaPixelFormat(display.TEXTURES_PIXEL_FORMAT[filename])
- sprite = spriteClass:create(filename)
- CCTexture2D:setDefaultAlphaPixelFormat(kCCTexture2DPixelFormat_RGBA8888)
- else
- sprite = spriteClass:create(filename)
- end
- end
将其改为:
复制代码
- if string.byte(filename) == 35 then -- first char is #
- local frame = display.newSpriteFrame(string.sub(filename, 2))
- if frame then
- sprite = spriteClass:createWithSpriteFrame(frame)
- end
- else
- local absfilename = io.getres(filename)
- if display.TEXTURES_PIXEL_FORMAT[filename] then
- CCTexture2D:setDefaultAlphaPixelFormat(display.TEXTURES_PIXEL_FORMAT[filename])
- sprite = spriteClass:create(absfilename)
- CCTexture2D:setDefaultAlphaPixelFormat(kCCTexture2DPixelFormat_RGBA8888)
- else
- sprite = spriteClass:create(absfilename)
- end
- end
5.3 修改display.newTilesSprite
将其中的 local sprite = CCSprite:create(filename, rect)
改为local sprite = CCSprite:create(io.getres(filename), rect)
5.4 修改 display.newBatchNode
改法与上面相同。
0 0
- quick-cocos2d-x的热更新机制实现<五>对 framework 的修改
- QUICK-COCOS2D-X的热更新机制实现
- quick-cocos2d-x的热更新机制实现
- quick-cocos2d-x的热更新机制实现<一>前言
- quick-cocos2d-x的热更新机制实现<六>后记
- quick-cocos2d-x的热更新机制实现<二>特色
- Quick-Cocos2d-x的热更新机制实现
- quick-cocos2d-x的热更新机制实现
- quick-cocos2d-x的热更新机制实现
- quick-cocos2d-x的热更新机制实现
- Quick-Cocos2d-x的热更新机制实现(终极版2)
- quick-cocos2d-x的热更新机制实现<三>Updater(C++)
- quick-cocos2d-x的热更新机制实现<四>update包(lua)(上)
- quick-cocos2d-x的热更新机制实现<四>update包(lua)(中)
- quick-cocos2d-x的热更新机制实现<四>update包(lua)(下)
- 基于Quick-cocos2d-x 2.2.3 的动态更新实现
- 基于Quick-cocos2d-x 2.2.3 的动态更新实现
- cocos2d-x 关于热更新的文章
- Lab
- Chrome不能打开千牛客户端的解决方法
- Ajax 学习一
- 让SSL/TLS协议流行起来:深度解读SSL/TLS实现
- 【Java编程】写入、读取、遍历配置文件 Properties类
- quick-cocos2d-x的热更新机制实现<五>对 framework 的修改
- 上传文件代码
- asp.net中回发
- cocos2dx 物理世界
- ListView / GirdView Adpater的getView方法,首项多次调用
- 第5章第9题
- TDDL使用
- Core Aduio API--Vista中音量控制的新特点(转)
- Zend Framework2 入门教程