【Zip压缩文件读取分享】

##1.6以下版本支持
(1.6等发了正式版再支持)

需求:

项目有很多杂乱的配置文件,比如关卡配置文件(PS:有上千关配置文件)
这时游戏在进入每一关时都会动态读取当前关卡的配置文件,由于Creator的加载机制没有同步
所以每次加载了场景【异步】,在动态读取关卡配置【异步】,这样写代码很恼火。

解决问题:

在游戏App一启动时把所有关卡配置文件全加载到内存中,需要用的时候直接使用!(所有关卡文件大概2~3M)
但如果上千个文件一个一个加载请求量大!所以利用压缩包把所有配置文件压缩成.zip文件
这样只需请求一次。

例子:

压缩文件目录结构

记住在动态加载前记得要先注册加载函数

Web
见附件Demo
将ZipLib文件导入为插件只允许Web平台使用

Native
将附件的JSBZip中的文件加入到工程项目中
然后在AppDelegate.cpp文件中注册JSB绑定函数

效果:

注意:

web端没测试过兼容性,可能存在不兼容的情况
(因为我不做web游戏,做web支持是因为想在浏览器上看下效果,
再次吐槽一下Creator对Native开发每次都要构建的坑!

Native测试是在IOS上测试,安卓机上没有验证过是否可行,但应该没啥问题!
不能在模拟器上跑,不能在模拟器上跑,不能在模拟器上跑!
如果要跑的话,估计要重新编译模拟器

现在压缩包只支持读取文本字符串,如果要压缩图片等格式文件的自行研究怎么
将拿到的数据做转化处理

免责申明

此代码仅做技术交流和学习, 如果用到项目中出现任何问题,本人不负责!

附件

Zip.zip (43.2 KB)

9赞

:clap: 感谢分享,
但zip方式不只是web模式,用不上了~

E:/Cocos/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/basic_string.h:240: error: undefined reference to ‘JSB_register_ZipData(JSContext*, JS::Handle<JSObject*>)’;
#include “ZipData.h”
#include “jsb_ZipData_manual.hpp”
引用了楼主的文件,安卓打包编译报错,何解!?

这个里面加没

感谢楼主。。。。

请问这个定义在哪里?

mark 好东西啊

感谢楼主的分享,带了demo这个操作非常好,10086个赞:+1:

mark

MARK

占个座

demo跑浏览器 不是 会报这个错么。没人遇到的吗