cocoscreator 2.4.x 热更新研究(1)

目标:了解win32工程资源是怎么更新的

VisualStudio 2017
CocosCreator 2.4.0

热更新cocoscreator官方文档
https://docs.cocos.com/creator/manual/zh/advanced-topics/assets-manager.html?h=%E7%83%AD%E6%9B%B4%E6%96%B0
https://docs.cocos.com/creator/manual/zh/advanced-topics/hot-update.html?h=%E7%83%AD%E6%9B%B4%E6%96%B0

这篇帖子只是说明,win32工程资源的更新机制,这个更新不是热更新,而是我们在creator中修改了资源例如在场景中添加了节点,修改了代码等,运行到win32上之后,如何显示我们最新修改的内容。

构建win32平台的意义,对于我来讲,主要是为了测试热更新流程

根据官网文档的说明即使是已经了解了cocoscreator的热更新机制,最终还是要实际操作一下,怎么才能快速的测试cocoscreator的热更新流程呢?
方案1 Android实践:
修改代码+资源 -> 构建android -> 打包apk -> 安装apk -> 运行
方案2 Win32实践:
修改代码+资源 -> 构建win32 -> 拷贝资源 -> 运行
方案2对比方案1,省掉了打包apk,安装apk的流程,用一个自动化的脚本拷贝资源,能节省下来不少的时间。通过查看win32平台的可写路径,可以直观的看到资源的下载情况,一目了然,非常便于调试热更新逻辑。在Android平台,观察可写路径下资源的变化情况就有些麻烦。

Step1:构建win32项目

注意不要勾选MD5 Cache
注意不要勾选MD5 Cache
注意不要勾选MD5 Cache

Step2:用VisualStudio2017打开项目

Step3:编译运行


如果出现错误MSB8036: 找不到 Windows SDK 版本8.1
报错的原因是因为visual studio里面没有安装windows 8.1 SDK插件,程序->程序和功能->在卸载或更改程序中找到visual studio 2017->右键->更改,勾选Windows 8.1 SDK

运行起来的界面

发现没有控制台输出不方便调试,找到main.cpp,将注释取消// #define USE_WIN32_CONSOLE,打开debug控制台

再次运行,就能看到控制台窗口了

Step4:更新资源

在creator中修改编辑场景,构建,在Visual Studio 2017中运行,发现资源变化了


很简单,只要把TestUpdate240\build\jsb-default\assets这个文件夹拷贝到TestUpdate240\build\jsb-default\frameworks\runtime-src\proj.win32\Debug.win32\assets下面就可以完成资源的更新。我们手动的拷贝也是可以的,然后直接运行Debug.win32\hello_world.exe就能看到变化,那么在Visual Studio 2017中点击运行按钮Visual Studio是如何做资源更新的呢,查找发现在这里做的操作hello_world项目\右键属性\自定义生成步骤里面发现了资源更新的脚本

拷贝出来看的更清晰

xcopy "$(ProjectDir)..\..\..\src" "$(OutDir)\src" /D /E /I /F /Y
xcopy "$(ProjectDir)..\..\..\assets" "$(OutDir)\assets" /D /E /I /F /Y
xcopy "$(ProjectDir)..\..\..\jsb-adapter" "$(OutDir)\jsb-adapter" /D /E /I /F /Y
copy "$(ProjectDir)..\..\..\main.js" "$(OutDir)\" /Y
copy "$(ProjectDir)..\..\..\project.json" "$(OutDir)\" /Y

10
结合资源一看,就了然了,一共拷贝了3个文件夹和2个文件

Step5:仿照着做个批处理来完成资源更新

用途是发布过一次win32之后,运行一次之后,就不需要再打开Visual Studio了,以后修改了资源,执行一下资源更新脚本,然后直接运行起来效果就是最新的了,创建文件命名为xxx.bat,保存到build\jsb-default目录下,然后在把proj.win32\Debug.win32\hello_world.exe创建一个快捷方式也放在xxx.bat同一个目录下

echo off

set from=D:\work\Client\build\jsb-default
set to=D:\work\Client\build\jsb-default\frameworks\runtime-src\proj.win32\Debug.win32

xcopy 	%from%\src 				%to%\src 			/D /E /I /F /Y
xcopy 	%from%\assets 			%to%\assets 		/D /E /I /F /Y
xcopy 	%from%\jsb-adapter 	%to%\jsb-adapter 		/D /E /I /F /Y
xcopy 	%from%\manifest 		%to%\manifest 		/D /E /I /F /Y
copy 	%from%\main.js 			%to% 				/Y
copy 	%from%\project.json 	%to% 				/Y

echo success
pause

Step6:看疗效

修改场景 -> 构建发布win32 -> 执行拷贝资源脚本 -> 点击快捷方式运行 -> 看到了更新

总结

通过上面的实践,发现调试程序就运行到web平台就好了,但是要是想测试热更新的话,用win32平台测,可以省去了在Android平台的打包和安装的过程,虽然还没有进入到热更新的内容,而仅仅是展示了资源的本地更新。但是win32平台具备热更新的能力。在下一篇内容中会逐步展开。通过在win32平台搞懂了热更新的细枝末节之后再在Android和IOS平台测试热更新,会起到事倍功半的效果。

希望这篇帖子能够帮助到你!!!

源于社区回馈社区!!!

浏览器改成模拟器运行不行吗?