以下是Cocos2dx3.10的测试实例 AssetsManagerExTest 的分析
1.客户端的文件结构
pjmj--
--res
--fonts
--Marker Felt.ttf
--Manifests
--project.manifest //客户端的版本信息文件
--LauncherScene.jpg
--LauncherScene.csd //下载更新界面
--MainScene.jpg
--MainScene.csd //游戏界面
--src
--config.lua
--main.lua //主函数
--app
--views
--LauncherScene.lua //下载更新脚本
--MainScene.lua //游戏界面脚本
--MyApp.lua //启动脚本
--packages
--mvc
--AppBase.lua
--init.lua
--ViewBase.lua
(1)project.manifest
{
"packageUrl" : "http://cocos2d-x.org/assets/cpp-tests-resources/assets_manager/AMTestScene1/",
"remoteManifestUrl" : "http://cocos2d-x.org/assets/cpp-tests-resources/assets_manager/AMTestScene1/project_dev.manifest",
"remoteVersionUrl" : "http://cocos2d-x.org/assets/cpp-tests-resources/assets_manager/AMTestScene1/version_dev.manifest",
"version" : "1.0.0",
"engineVersion" : "3.0 beta",
"assets" : {
"Images/background1.jpg" : {
"md5" : "..."
}
},
"searchPaths" : [
]
}
注意:
packageUrl 是web服务器的地址
remoteManifestUrl 在游览器中输入此地址,应该可以直接弹出一个下载 project_dev.manifest 的对话框
remoteVersionUrl 在游览器中输入此地址,应该可以直接弹出一个下载 version_dev.manifest 的对话框
version 1.0.0 1是大版本,后面的数字代表小版本
1.1.下载步骤
(1)LauncherScene.lua中,程序创建AssetsManagerEx对象。
AssetsManagerEx.lua在 Cocos/Cocos2d-x/cocos2d-x-3.10/cocos/scripting/lua-bindings/auto/api 下,其在
创建Android模拟器时通过 项目目录/frameworks/runtime-src/proj.android/jni/Android.mk 被调用,如下
$(call import-add-path,d:/Cocos/Cocos2d-x/cocos2d-x-3.10/cocos)
$(call import-module,scripting/lua-bindings/proj.android/prebuilt-mk)
AssetsManagerEx.lua中全是转化为lua对应的函数名字,没有内容,所以,最好查看AssetsManagerEx.cpp
(2)AssetsManagerEx的create函数要求传入2个参数:
客户端的版本信息文件project.manifest、下载保存目录。
假设下载保存目录为myUpdate,在win7上启动windows模拟器时,此目录会创建在项目目录之下,与res、src同级。
create函数的作用就是,若发现没有 myUpdate 目录,则创建一个 myUpdate 目录。
然后下载web服务器上的 project_dev.manifest、version_dev.manifest,但将它们重命名
为 project.manifest、version.manifest,其内容如下
project.manifest-------------------
{
"packageUrl" : "http://tools.itharbors.com/assets_manager/AMTestScene1/",
"remoteManifestUrl" : "http://tools.itharbors.com/assets_manager/AMTestScene1/project_dev.manifest",
"remoteVersionUrl" : "http://tools.itharbors.com/assets_manager/AMTestScene1/version_dev.manifest",
"version" : "1.2.0",
"engineVersion" : "3.x dev",
"assets" : {
"Images/assetMgrBackground1.jpg" : {
"md5" : "....."
},
"Images/ball.png" : {
"md5" : "..."
},
"Images/blocks.png" : {
"md5" : "..."
},
"compressed.zip" : {
"md5" : "...",
"compressed" : true
},
"Images/Bird.jpg" : {
"md5" : "..."
},
"Images/Daisy_Flower.jpg" : {
"md5" : "..."
},
"Images/Mountain_Reflections.jpg" : {
"md5" : "..."
},
"Images/Plitvice_National_Park.jpg" : {
"md5" : "..."
},
"Images/sakountala.jpg" : {
"md5" : "..."
},
"Images/Snake_River.jpg" : {
"md5" : "..."
},
"Images/Thunder.jpg" : {
"md5" : "..."
},
"Images/Tranquil_Lagoon.jpg" : {
"md5" : "..."
},
"Images/Tyrol.jpg" : {
"md5" : "..."
},
"Images/univ-lille1.jpg" : {
"md5" : "..."
},
"Images/Yellow_Garden_Flowers.jpg" : {
"md5" : "..."
},
"Images/Yellow_Lilly.jpg" : {
"md5" : "..."
},
"Images/Yellow_Tulips.jpg" : {
"md5" : "..."
}
},
"searchPaths" : [
]
}
version.manifest-------------------
{
"packageUrl" : "http://tools.itharbors.com/assets_manager/AMTestScene1/",
"remoteManifestUrl" : "http://tools.itharbors.com/assets_manager/AMTestScene1/project_dev.manifest",
"remoteVersionUrl" : "http://tools.itharbors.com/assets_manager/AMTestScene1/version_dev.manifest",
"version" : "1.2.0",
"engineVersion" : "3.0 dev"
}
(3)然后AssetsManagerEx对象检查更新版本号
客户端的版本信息文件 project.manifest 中 "version" : "1.0.0"
服务器的版本信息文件 project.manifest 中 "version" : "1.2.0"
这里服务器的版本号明显大于客户端的,于是AssetsManagerEx对象会开启下载。
(4)AssetsManagerEx对象开启下载
服务器的版本信息文件 project.manifest 中
packageUrl http://tools.itharbors.com/assets_manager/AMTestScene1/
表明下载的资源在以上的网址中。
下载之后,如下:
myUpdate--
--Images
--assetMgrBackground1.jpg
--ball.png
...
--compressed //压缩文件会直接解压
-- ...
这样,原来我们只有一个res资源目录,现在又多了一个myUpdate资源目录,且每次先从myUpdate资源目录查找资源。
1.客户端的文件结构
pjmj--
--res
--fonts
--Marker Felt.ttf
--Manifests
--project.manifest //客户端的版本信息文件
--LauncherScene.jpg
--LauncherScene.csd //下载更新界面
--MainScene.jpg
--MainScene.csd //游戏界面
--src
--config.lua
--main.lua //主函数
--app
--views
--LauncherScene.lua //下载更新脚本
--MainScene.lua //游戏界面脚本
--MyApp.lua //启动脚本
--packages
--mvc
--AppBase.lua
--init.lua
--ViewBase.lua
(1)project.manifest
{
"packageUrl" : "http://cocos2d-x.org/assets/cpp-tests-resources/assets_manager/AMTestScene1/",
"remoteManifestUrl" : "http://cocos2d-x.org/assets/cpp-tests-resources/assets_manager/AMTestScene1/project_dev.manifest",
"remoteVersionUrl" : "http://cocos2d-x.org/assets/cpp-tests-resources/assets_manager/AMTestScene1/version_dev.manifest",
"version" : "1.0.0",
"engineVersion" : "3.0 beta",
"assets" : {
"Images/background1.jpg" : {
"md5" : "..."
}
},
"searchPaths" : [
]
}
注意:
packageUrl 是web服务器的地址
remoteManifestUrl 在游览器中输入此地址,应该可以直接弹出一个下载 project_dev.manifest 的对话框
remoteVersionUrl 在游览器中输入此地址,应该可以直接弹出一个下载 version_dev.manifest 的对话框
version 1.0.0 1是大版本,后面的数字代表小版本
1.1.下载步骤
(1)LauncherScene.lua中,程序创建AssetsManagerEx对象。
AssetsManagerEx.lua在 Cocos/Cocos2d-x/cocos2d-x-3.10/cocos/scripting/lua-bindings/auto/api 下,其在
创建Android模拟器时通过 项目目录/frameworks/runtime-src/proj.android/jni/Android.mk 被调用,如下
$(call import-add-path,d:/Cocos/Cocos2d-x/cocos2d-x-3.10/cocos)
$(call import-module,scripting/lua-bindings/proj.android/prebuilt-mk)
AssetsManagerEx.lua中全是转化为lua对应的函数名字,没有内容,所以,最好查看AssetsManagerEx.cpp
(2)AssetsManagerEx的create函数要求传入2个参数:
客户端的版本信息文件project.manifest、下载保存目录。
假设下载保存目录为myUpdate,在win7上启动windows模拟器时,此目录会创建在项目目录之下,与res、src同级。
create函数的作用就是,若发现没有 myUpdate 目录,则创建一个 myUpdate 目录。
然后下载web服务器上的 project_dev.manifest、version_dev.manifest,但将它们重命名
为 project.manifest、version.manifest,其内容如下
project.manifest-------------------
{
"packageUrl" : "http://tools.itharbors.com/assets_manager/AMTestScene1/",
"remoteManifestUrl" : "http://tools.itharbors.com/assets_manager/AMTestScene1/project_dev.manifest",
"remoteVersionUrl" : "http://tools.itharbors.com/assets_manager/AMTestScene1/version_dev.manifest",
"version" : "1.2.0",
"engineVersion" : "3.x dev",
"assets" : {
"Images/assetMgrBackground1.jpg" : {
"md5" : "....."
},
"Images/ball.png" : {
"md5" : "..."
},
"Images/blocks.png" : {
"md5" : "..."
},
"compressed.zip" : {
"md5" : "...",
"compressed" : true
},
"Images/Bird.jpg" : {
"md5" : "..."
},
"Images/Daisy_Flower.jpg" : {
"md5" : "..."
},
"Images/Mountain_Reflections.jpg" : {
"md5" : "..."
},
"Images/Plitvice_National_Park.jpg" : {
"md5" : "..."
},
"Images/sakountala.jpg" : {
"md5" : "..."
},
"Images/Snake_River.jpg" : {
"md5" : "..."
},
"Images/Thunder.jpg" : {
"md5" : "..."
},
"Images/Tranquil_Lagoon.jpg" : {
"md5" : "..."
},
"Images/Tyrol.jpg" : {
"md5" : "..."
},
"Images/univ-lille1.jpg" : {
"md5" : "..."
},
"Images/Yellow_Garden_Flowers.jpg" : {
"md5" : "..."
},
"Images/Yellow_Lilly.jpg" : {
"md5" : "..."
},
"Images/Yellow_Tulips.jpg" : {
"md5" : "..."
}
},
"searchPaths" : [
]
}
version.manifest-------------------
{
"packageUrl" : "http://tools.itharbors.com/assets_manager/AMTestScene1/",
"remoteManifestUrl" : "http://tools.itharbors.com/assets_manager/AMTestScene1/project_dev.manifest",
"remoteVersionUrl" : "http://tools.itharbors.com/assets_manager/AMTestScene1/version_dev.manifest",
"version" : "1.2.0",
"engineVersion" : "3.0 dev"
}
(3)然后AssetsManagerEx对象检查更新版本号
客户端的版本信息文件 project.manifest 中 "version" : "1.0.0"
服务器的版本信息文件 project.manifest 中 "version" : "1.2.0"
这里服务器的版本号明显大于客户端的,于是AssetsManagerEx对象会开启下载。
(4)AssetsManagerEx对象开启下载
服务器的版本信息文件 project.manifest 中
packageUrl http://tools.itharbors.com/assets_manager/AMTestScene1/
表明下载的资源在以上的网址中。
下载之后,如下:
myUpdate--
--Images
--assetMgrBackground1.jpg
--ball.png
...
--compressed //压缩文件会直接解压
-- ...
这样,原来我们只有一个res资源目录,现在又多了一个myUpdate资源目录,且每次先从myUpdate资源目录查找资源。