Quick-cocos2d-x的热更新机制实现(终极版2)(更新3.3版本)

看看是不是加密和解密的密码不一样导致的。

不是的呢,我加载的zip在AppDelegate里面写的话就不会出错,我的密码一直是写在AppDelegate里面的。不知道为甚么会这样,lua里面不知道在哪里添加密码这些

你是怎么生成的game.zip.

cocos/scripting/lua-bindings/manual/cocos2d/lua_cocos2dx_manual.cpp 这个文件直接修改就行么?
cc.HelperFunc:getFileData()这个方法能否代替?
用quick一直没有看怎么导出lua
谢谢!

cc.HelperFunc:getFileData() 不可以 cc.HelperFunc:getFileData() 是做过解密后的数据。你看github上有修改这个bug的,你按照他的修改就可以了。

我按照git上面修改还是会报。我只是在lua_cocos2dx_manual.cpp文件加了git上面增加的部分。其他什么都没有做
LUA ERROR: :194: attempt to call method ‘getDataFromFile’ (a nil value)

stack traceback:
:194: in function ‘readFile’
:256: in function ‘fileMd5’
:132: in function ‘_onLauncherPacakgeFinished’
:107: in function ‘_onResponse’
:81: in function <:80>

你的时什么版本 是不是没修改对啊,按照一样修改是不会有问题的。

quick的3.3版本
我修改的是这个文件


代码是git上copy下来的

quick 3.3
代码是git上copy下来的

你没有写全还有一个 地方需要添加
static void extendFileUtils(lua_State* tolua_S)
{
lua_pushstring(tolua_S, “cc.FileUtils”);
lua_rawget(tolua_S, LUA_REGISTRYINDEX);
if (lua_istable(tolua_S,-1))
{
lua_pushstring(tolua_S,“getStringFromFile”);
lua_pushcfunction(tolua_S,tolua_cocos2dx_FileUtils_getStringFromFile );
lua_rawset(tolua_S,-3);

    lua_pushstring(tolua_S,"getDataFromFile");
    lua_pushcfunction(tolua_S,tolua_cocos2dx_FileUtils_getDataFromFile );
    lua_rawset(tolua_S,-3);
}
lua_pop(tolua_S, 1);

}

跪谢。以后得长心了

解决问题就好。

我首先从https://github.com/dualface/v3quick.git上clone下了代码,编译是成了player3.app,将这个player3.app复制到v3quick目录下,在将v3quick改名quick-3.3并将这个这个文件夹下所有的东西一起移动到~/Documents下,最后执行quick-3.3下的setup_mac.sh

用player3创建了工程(update),用从本贴下载的sample中的文件替换update工程中对应的文件(因为没有FZPangWa-M18T.ttf,我将src/launcher/config.lua中FZPangWa-M18T.ttf替换成了arial.ttf)

在player3中运行,报错: LUA ERROR: :233: bad argument #1 to ‘loadstring’ (string expected, got nil)

stack traceback:
: in function ‘loadstring’
:233: in function ‘doFile’
:47: in function ‘_checkUpdate’
:23: in function ‘listener’
:308: in function <:306>

我查了是路径没有设置对,所以我在src/main.lua 中fileUtils:purgeCachedEntries() 后面添加了fileUtils:addSearchPath(“res/”,false)

再次运行,报错: LUA ERROR: :51: attempt to index field ‘_textLabel’ (a nil value)

stack traceback:
:51: in function ‘_checkUpdate’
:23: in function ‘listener’
:308: in function <:306>

我查了代码self._textLabel = cc.Label:createWithTTF(STR_LCHER_HAS_UPDATE, LCHER_FONT, 20)中_textLabel我nil,我不知道该去哪跟 cc.Label:createWithTTF这个代码,所以不知道咋回事,只有先把所有的_textLabel注释掉,用print输出提示。(后面的_progressLabel也遇到同样的问题)
最后大概算跑通了,存在上面那个疑问。最后还在跟代码时在ConfigParser中指定了lua入口是src/main.lua,想问下,怎么修改这个入口

1.你拷贝了我的AppDelegate这个C++相关修改就不需要这样修改:“在src/main.lua 中fileUtils:purgeCachedEntries() 后面添加了fileUtils:addSearchPath(“res/”,false)”
2.FZPangWa-M18T字体没有你代码中是否修改了在launcher/config.lua文件里面修改成arial.ttf
3.修改上面2项就应该没有3了。

非常感谢,我在xcode中跑是没有问题,但是在player3来跑还是有问题,改了C++代码怎么才能在player3中生效呢
还有个就是LuaObjcFun在xcode中会提示LuaObjcFun.mm:11:17: Expected namespace name,是否需要添加#include <cocos2d.h>。

如果我想把程序用我更新的main.lua的话是不是只有重新打包上传了?

main.lua 没有逻辑啊 这点你也不能保证,他只是一个入口。

修改了AppDelegate中的代码,怎么才可以用player3来测试?

自己要编译代码

我就这样加的密啊 compile_scripts.bat -i scripts -o game.zip -m zip -e xxtea_chunk -ek XXX -es test

确定下加密和解密的密码 大小写是否一样。