发布于:,更新于:

《方案》拼图在线更新

拼图10103D-拼图下载模块

拼图下载模块

目录
一、关键类或对象
二、关键步骤
三、关键方法
四、其他细节
五、资源目录
六、服务器追加新图

一、关键类或对象:

1
2
3
4
CJigsawMapLayer                         //走廊类,有个tableView成员,用于展示CJigsawFrame
CJigsawFrame //画框类,位于tableView的cell上
CDataCenter::g_data //拼图数据对象,全局,存储拼图的部分数据(如拼图解锁数等)
vector<jigsawLevelCfg> g_levelsCfgArr; //拼图配置容器,全局,汇总走廊内置拼图+云拼图的配置

二、关键步骤:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
1.启动游戏时,读取拼图配置
执行:AppDelegate()/startGame()/initStyle()/::dealLevelsCfgByGroup() //从文件读配置,生成配置列表,放入容器
域:blockStyle.cpp
实现:
先读取内置本地配置文件,写入g_levelsCfgArr

若writablePath下有云配置文件,读取追加到g_levelsCfgArr
否则读取内置云配置文件,读取追加到g_levelsCfgArr

2.启动游戏时,检查下载老用户丢失的资源:
执行:AppDelegate()/startGame()/initStyle()/::dealLevelsCfgByGroup()/
域:blockStyle.cpp
实现:
::dealLevelsCfgByGroup()
{
...
//检查下载本地拼图至已解锁拼图之间的所有拼图,索引区间[localIndex+1,openedJigsawCount-1]
int local = g_data->getLocalJigsawCnt() ;
int open = g_data->getOpenedJigsawCnt() ;
for(int idx=local; idx<open ; ++idx)
{
g_data->checkDownloadJigsawsByIdxInOrder(idx, true,1) ; ///优先级为1
}
...
}

3.每次解锁拼图时,向后下载10幅+检查更新云配置:
执行:不固定
域:blockStyle.cpp::CDataCenter::setOpenedJigsawCnt
实现:
g_data->CDataCenter::setOpenedJigsawCnt(int cnt,bool donate)
{
...
if(!donate) //donateJigsaw 时,g_levelsCfgArr还未初始化
{
checkJigsawUpdate(); //老版本用户:检查更新list-online.json
//新版本用户:检查更新list-online2.json
checkDownloadJigsawsWhenUnlock(); //检查下载后面10幅拼图,优先级为0
}
...
}

4.监听下载拼图
执行:CJigsawMapLayer::tableCellAtIndex()/CJigsawFrame::create()/CJigsawFrame::init()/CJigsawFrame::registerDownLoadListener()
域:CJigsawMapLayer.cpp::CJigsawFrame::registerDownLoadListener
实现:
下载中,更新进度条,判断是否展示广告,更新广告logo等
下载完成,标记拼图.hasDownload = true ;刷新UI ;
下载失败,showWifiLayer();

5.点击下载拼图
执行:点击画框/CjigsawFrame::onStartJigsaw()
域:CJigsawMapLayer.cpp::CJigsawFrame::onStartJigsaw
实现:
资源已经存在,那么走假进度动画
从Action的回调里得知动画进度
资源不存在时,下载:
g_data->CDataCenter::checkDownloadJigsawsByIdx(idx, true) ;
下载的进度通过事件,分发给CJigsawFrame对象,更新到UI

三、关键方法:

  • ::dealLevelsCfgByGroup();
  • CJigsawFrame::registerDownLoadListener();
  • CjigsawFrame::onStartJigsaw();
  • CDataCenter::setOpenedJigsawCnt();
  • CDataCenter::checkDownloadJigsawsByIdx();
    立即下载拼图,用于用户点击的场景,可以多任务并行下
    下载进度通过事件分发给对象
  • CDataCenter::checkDownloadJigsawsByIdxInOrder()
    下载任务添加到容器中,容器管理下载任务
    优先级越大越优先下载
    某任务三次没响应,丢到末尾,切到下一个
    一次轮询的睡眠时间是5秒
    下载进度通过事件分发给对象

四、细节补充:

  • CocosUI线程睡眠时,在BulldogNet的回调里,直接执行关于GL的操作,UI会出现问题;
    例:熄屏状态下,拼图下载完,读纹理创建模糊图精灵放到画框,创建出来纹理是黑的 ;
    状态:已解决;
    方案:利用Scheduler把回调放到UI线程
  • 资源下载优先级:
    用户点击下载拼图>自动下载拼图>下载音乐
  • 老用户更新后,资源丢失所采取的措施:
    自动检查并下载索引区间[localJigsawCount,openedJigsawCount)
  • 拼图下载流程
    自动下载时->接收事件,跑真进度->不是手动,不弹广告->下载完,更新画框->用户点击->用Action跑假进度->播广告->广告logo消失
    手动下载时->接收事件,跑真进度->弹广告->logo消失->下载完,更新画框
  • 云配置文件更新
    老服务器/BlockJigsawPuzzle/config/list.json 会同步内容到 老版本用户的list-online.json
    新服务器/BlockJigsawPuzzle/JigsawConfig2/list.json 会同步内容到 新版本用户的list-online2.json

五、资源目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
服务器目录  
老:http://d265krnl4xx9mj.cloudfront.net/BlockJigsawPuzzle/
CheckJigsawList.php 后端文件
config/
version.josn 版本文件
list.json 拼图配置
新:http://resgame.appcpi.net/BlockJigsawPuzzle/
JigsawConfig2/
CheckJigsawList2.php
version2.json
list2.json

包目录
wood21010Jigsaw_2/_1010Jigsaw/
_customJigsaws-pieces48-wptop50/
原50幅
list-wp.json
list-online.json
_customJigsaws-pieces48-wptop25/
新25幅
list-wp_new.json
list-wp2.json
list-online2.json
用户目录
writablePath/
list-online.json
list-online2.json
... 一堆各拼图文件夹

六、服务器追加新拼图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
用脚本生成文件,更新到服务器
先本地测试:
http://yujizhu.com:8083/BlockJigsawPuzzle/config/list.json
http://yujizhu.com:8083/BlockJigsawPuzzle/config/version.json
http://yujizhu.com:8083/BlockJigsawPuzzle/JigsawConfig2/list.json
http://yujizhu.com:8083/BlockJigsawPuzzle/JigsawConfig2/version.json
http://yujizhu.com:8083/BlockJigsawPuzzle/增拼图压缩包
上线:
联系人:杜家兑
http://d265krnl4xx9mj.cloudfront.net/BlockJigsawPuzzle/config/list.json 检查版本号、拼图数、url
http://d265krnl4xx9mj.cloudfront.net/BlockJigsawPuzzle/config/version.json 检查版本号
http://d265krnl4xx9mj.cloudfront.net/BlockJigsawPuzzle/ 增加拼图zip
http://resgame.appcpi.net/BlockJigsawPuzzle/JigsawConfig2/list.json 检查版本号、拼图数、url
http://resgame.appcpi.net/BlockJigsawPuzzle/JigsawConfig2/version.json 检查版本号
http://resgame.appcpi.net/BlockJigsawPuzzle/ 增加拼图zip