开发环境:WIN7 + cocos2dx 3.10 lua版本

0.学习这篇内容的基础是你要会创建并运行一个cocos lua项目

1.热更新的思想
所谓的热更新,就是在线更新代码和资源。
热更新的过程首先,客户端向服务器发送请求,服务器告诉客户端,没更新啦,你是最新的啦,那就直接跳过喽。但如果是告诉你有更新,那就要告诉我哪些需要更新对吧,你可能需要更新的东西,放在一个文件里,一并发送给客户端,客户端拿到这个文件,就一个一个去向服务器要,最后把要更新的内容都下载到本地了。

2.热更新用到的类:
AssetsManagerEx

3.最简单的示例:
(1)把下面的完整代码复制到main.lua。
(2)先去cocos2dx3.10工程目录,把X:\cocos2d-x-3.10\build\Debug.win32\lua-tests\res\Manifests\AMTestScene1\project.manifest这个文件复制

到工程目录下的src/version/这里(version没有的话自己建一个文件夹)
(3)然后启动你的工程,就能更新到官方例子的资源了,资源下载路径在日志有显示(日志乱码的话,把main.lua高级保存为utf8-无签名)。

cc.FileUtils:getInstance():setPopupNotify(false)
cc.FileUtils:getInstance():addSearchPath("src/")
cc.FileUtils:getInstance():addSearchPath("res/") require "config"
require "cocos.init" local function main()
print("开始启动程序") --初始界面
local _Director = cc.Director:getInstance()
local _Wide = display.width
local _Hight = display.height local scene = cc.Scene:create()
if _Director:getRunningScene() then
_Director:replaceScene(scene)
else
_Director:runWithScene(scene)
end local spHelloWorld = cc.Sprite:create("HelloWorld.png")
spHelloWorld:setPosition(_Wide / , _Hight / )
spHelloWorld:addTo(scene,) local text = cc.Label:createWithSystemFont("Hello World", "Arial", )
text:move(display.cx, display.cy + )
text:addTo(scene,) --更新完成后的界面
local function run()
print("启动完成") local bg = cc.Sprite:create("Images/Tranquil_Lagoon.jpg")
bg:setPosition(_Wide / , _Hight / )
bg:addTo(scene) text:setString("Hello World 更新完成") end --热更新开始
local writablePath = cc.FileUtils:getInstance():getWritablePath()
local storagePath = writablePath .. "new_version"
--将下载目录的src和res作为优先级最高的搜索目录,这样才能保证下载的能覆盖原来的代码
cc.FileUtils:getInstance():addSearchPath(storagePath.."/src/",true)
cc.FileUtils:getInstance():addSearchPath(storagePath.."/res/",true) print("下载路径:"..storagePath) -- 创建AssetsManagerEx对象 --参数:本地project.manifest 下载保存路径
local assetsManagerEx = cc.AssetsManagerEx:create("src/version/project.manifest", storagePath)
assetsManagerEx:retain() -- 设置下载消息listener
local function handleAssetsManagerEx(event)
if (cc.EventAssetsManagerEx.EventCode.ALREADY_UP_TO_DATE == event:getEventCode()) then
print("已经是最新版本了,进入游戏主界面")
run()
end if (cc.EventAssetsManagerEx.EventCode.NEW_VERSION_FOUND == event:getEventCode()) then
print("发现新版本,开始升级")
end if (cc.EventAssetsManagerEx.EventCode.UPDATE_PROGRESSION == event:getEventCode()) then
print("更新进度=" .. event:getPercent())
end if (cc.EventAssetsManagerEx.EventCode.UPDATE_FINISHED == event:getEventCode()) then
print("更新完毕,重新启动")
run()
end if (cc.EventAssetsManagerEx.EventCode.ERROR_NO_LOCAL_MANIFEST == event:getEventCode()) then
print("发生错误:本地找不到manifest文件")
end if (cc.EventAssetsManagerEx.EventCode.ERROR_DOWNLOAD_MANIFEST == event:getEventCode()) then
print("发生错误:下载manifest文件失败")
end if (cc.EventAssetsManagerEx.EventCode.ERROR_PARSE_MANIFEST == event:getEventCode()) then
print("发生错误:解析manifest文件失败")
end if (cc.EventAssetsManagerEx.EventCode.ERROR_UPDATING == event:getEventCode()) then
print("发生错误:更新失败")
end
end --热更新事件
local dispatcher = cc.Director:getInstance():getEventDispatcher()
local eventListenerAssetsManagerEx = cc.EventListenerAssetsManagerEx:create(assetsManagerEx, handleAssetsManagerEx)
dispatcher:addEventListenerWithFixedPriority(eventListenerAssetsManagerEx, ) local localManifest = assetsManagerEx:getLocalManifest()
print("当前版本:"..localManifest:getVersion()) -- 检查版本并升级
assetsManagerEx:update()
end local status, msg = xpcall(main, __G__TRACKBACK__)
if not status then
print(msg)
end

(原创)cocos lua 热更新从零开始(一)最简单demo的更多相关文章

  1. Lua热更新时正确设置文件名

    Lua热更新时正确设置文件名(金庆的专栏 2016.12)Lua热更新模块见:https://github.com/jinq0123/hotfix其中使用 load(chunk) 来加载更新后的内容, ...

  2. Lua热更新(hotfix)

    Lua热更新(hotfix)(金庆的专栏)hotfixLua 5.2/5.3 hotfix. Hot update functions and keep old data.https://github ...

  3. 出售一套Unity + Lua热更新框架代码

    出售一套Unity + Lua的客户端框架代码,功能有资源管理.网络通信.配置文件解析.热更新.文件读写.Lua加密揭秘.UI框架.打包工具.编辑器工具等,已经在多个实际项目(已上线)中使用.代码优雅 ...

  4. cocos creator热更新教程

    1.下载HotUpdate热更新DEMO 2.在cocos creator中下载热更新插件,cocos creator版本要在1.7及以上版本 3.插件默认安装在C:\Users\Administra ...

  5. Cocos Creator 热更新文件MD5计算和需要注意的问题

    Creator的热更新使用jsb.热更新基本按照 http://docs.cocos.com/creator/manual/zh/advanced-topics/hot-update.html?h=% ...

  6. cocos2dx lua 热更新方案的实现

    (Upgrade.h) #include <stdio.h> #include "cocos2d.h" #include "framework/utils/U ...

  7. 腾讯开源手游热更新方案,Unity3D下的Lua编程

    原文:http://www.sohu.com/a/123334175_355140 作者|车雄生 编辑|木环 腾讯最近在开源方面的动作不断:先是微信跨平台基础组件Mars宣布开源,腾讯手游又于近期开源 ...

  8. 手游为什么要热更新,C#为什么不能热更新,LUA为什么可以

    热更新是什么?简单的说就是打补丁,只补需要部分,不用重个游戏包重打上传 热更新问题的本质是代码更新而不是资源更新,为什么呢? 大型手游都是将补丁资源放在专门的WEB服务器上,游戏启动时动态下载并放入到 ...

  9. 另类Unity热更新大法:代码注入式补丁热更新

    对老项目进行热更新 项目用纯C#开发的? 眼看Unity引擎热火朝天,无数程序猿加入到了Unity开发的大本营. 一些老项目,在当时ulua/slua还不如今天那样的成熟,因此他们选择了全c#开发:也 ...

随机推荐

  1. 追逐心目中的那个Ta

    申明:全篇皆为作者臆想,浪漫主义代表派作品,若有雷同,纯属巧合 人生最难过的不就是在一无所有的年纪里遇到了最想呵护一生的人,而在拥有一切的时候却失去了不顾一切的心. 长夜漫漫,本是相思人,偏听多情曲, ...

  2. supervisor 守护者进程配置小记

    安装 Supervisor 联网状态下,官方推荐首选安装方法是使用easy_install,它是setuptools(Python 包管理工具)的一个功能.所以先执行如下命令安装 setuptools ...

  3. RBAC权限管理模型 产品经理 设计

    RBAC权限管理模型:基本模型及角色模型解析及举例 | 人人都是产品经理http://www.woshipm.com/pd/440765.html RBAC权限管理 - PainsOnline的专栏 ...

  4. Python 中关于 round 函数的坑

    round函数很简单(而且不需要引入math模块),对浮点数进行近似取值,保留几位小数. 比如 # -*- coding: UTF-8 -*- r1=round(12.12345,3) r2=roun ...

  5. P2256 一中校运会之百米跑(map映射加并查集)

    真心水,也许只有我这样的蒟蒻能做这种题了吧.用STL中的map将所有人的名字映射成一个数字,然后就是并查集的裸题 #include<bits/stdc++.h> using namespa ...

  6. Shell命令-文件及目录操作之mkdir、mv

    文件及目录操作 - mkdir.mv 1.mkdir:创建目录 mkdir命令的功能说明 mkdir命令用于创建目录,默认情况下,要创建的目录已存在,会提示文件存在,不会继续创建目录. mkdir命令 ...

  7. PostgreSQL安装详细步骤windows

    PostgreSQL安装:一.windows下安装过程安装介质:postgresql-9.1.3-1-windows.exe(46M),安装过程非常简单,过程如下:1.开始安装: 2.选择程序安装目录 ...

  8. Django 分页组件替换自定义分页

    Django的分页器(paginator) 总之不太好用我们还是用自己的好一些 自定义分页器 分页实现源码 """ 自定义分页组件 """ ...

  9. linux虚拟机 在install yum时提示无法获得锁 var/lib/dekg/lock时该如何解决?

    起因 在新虚拟机中使用yum命令时提示要安装,安装过程中提示出错. 问题 在sudo apt install yum时提示下列错误该如何解决? E: 无法获得锁 /var/lib/dpkg/lock ...

  10. C#动态操作DataTable(新增行、列、查询行、列等)

    public void CreateTable() { //创建表 DataTable dt = new DataTable(); //1.添加列 dt.Columns.Add("Name& ...