cocos2d-x 3.2 项目开发 ValueMap 的遍历

快乐塔防项目中的获取关卡信息,读取的是.plist文件的内容,其是一个ValueMap

 

 

 1 void GameInfoPlist::readTowerInfoOfPlist()
 2 {
 3     GameManager * instance = GameManager::getInstance();
 4     ValueMap& groupDict = levelInfo["groupTower"].asValueMap();
 5     // 获取 共有几个炮塔
 6     instance->setGroupTowerNum(groupDict.size());
 7     for (long i = 1; i <= 30; i++)
 8     {
 9         auto groupTemp = groupDict.find(std::to_string(i));
10         if (groupTemp != groupDict.cend() && groupTemp->second.getType() == Value::Type::MAP)
11         {
12             ValueMap& group = groupTemp->second.asValueMap();
13 
14             long towerTypeTemp = group["towerType"].asInt();
15             long towerIndexTemp = group["towerIndex"].asInt();
16             long towerLevelTemp = group["towerLevel"].asInt();
17             long towerScopeTemp = group["towerScope"].asInt();
18             long towerValueTemp = group["towerValue"].asInt();
19             long towerRateTemp = group["towerRate"].asInt();
20             long towerLethalityTemp = group["towerLethality"].asInt();
21             long towerTypeBulletTemp = group["towerTypeBullet"].asInt();
22             float towerBulletTimer = group["towerBulletTimer"].asFloat();
23             GroupOfTower *groupOfTower = GroupOfTower::create()->addOneTower(towerTypeTemp, towerIndexTemp, towerLevelTemp, towerScopeTemp, towerValueTemp, towerRateTemp, towerLethalityTemp, towerTypeBulletTemp, towerBulletTimer);
24             instance->vecGroupOfTower.pushBack(groupOfTower);
25         }
26         else
27         {
28             continue;
29         }
30     }
31     //for (auto iter = groupDict.begin(); iter != groupDict.end(); ++iter)
32     //{
33     //    std::string strTempGroupFirst = iter->first;
34     //    log("first tower = %s", strTempGroupFirst.c_str());
35     //    ValueMap& group = iter->second.asValueMap();
36 
37     //    long towerTypeTemp            = group["towerType"].asInt();
38     //    long towerIndexTemp            = group["towerIndex"].asInt();
39     //    long towerLevelTemp            = group["towerLevel"].asInt();
40     //    long towerScopeTemp            = group["towerScope"].asInt();
41     //    long towerValueTemp            = group["towerValue"].asInt();
42     //    long towerRateTemp            = group["towerRate"].asInt();
43     //    long towerLethalityTemp        = group["towerLethality"].asInt();
44     //    long towerTypeBulletTemp    = group["towerTypeBullet"].asInt();
45     //    float towerBulletTimer        = group["towerBulletTimer"].asFloat();
46     //    GroupOfTower *groupOfTower = GroupOfTower::create()->addOneTower(towerTypeTemp, towerIndexTemp, towerLevelTemp, towerScopeTemp, towerValueTemp, towerRateTemp, towerLethalityTemp, towerTypeBulletTemp, towerBulletTimer);
47     //    instance->vecGroupOfTower.pushBack(groupOfTower);
48     //}
49 }

 

其中被注释的代码也可以完成遍历,

但是在android中却发现获取的内容是不是按顺序的,

所以只能使用上面的方法来强制按数字的顺序来获取,以保证是按顺序获取的值

 

 1 void GameInfoPlist::readEnemyInfoOfPlist()
 2 {
 3     GameManager * instance = GameManager::getInstance();
 4     ValueMap& groupDict = levelInfo["groupEnemy"].asValueMap();
 5     // 获取 共有几组敌人
 6     instance->setGroupEnemyNum(groupDict.size());
 7 
 8     for (long i = 1; i <= 30; i ++)
 9     {
10         auto groupTemp = groupDict.find(std::to_string(i));
11         if (groupTemp != groupDict.cend() && groupTemp->second.getType() == Value::Type::MAP)
12         {
13             ValueMap& group = groupTemp->second.asValueMap();
14             // 当前组中的敌人对象
15             GroupOfEnemy *groupOfEenemy = GroupOfEnemy::create();
16 
17             // 获取敌人的数量和hp
18             char enemyNum[50] = { 0 };
19             char enemyHp[50] = { 0 };
20             char enemyIndex[50] = { 0 };
21             char enemyRunSpeed[50] = { 0 };
22             char enemyValue[50] = { 0 };
23             for (long i = 0; i <= 3; i++)
24             {
25                 sprintf(enemyNum, "type%dNum", i);
26                 sprintf(enemyHp, "type%dHp", i);
27                 sprintf(enemyIndex, "type%dIndex", i);
28                 sprintf(enemyRunSpeed, "type%dRunSpeed", i);
29                 sprintf(enemyValue, "type%dValue", i);
30 
31                 long enemyNumTemp = group[enemyNum].asInt();
32                 long enemyHpTemp = group[enemyHp].asInt();
33                 long enemyIndexTmep = group[enemyIndex].asInt();
34                 long enemyRunSpeedTemp = group[enemyRunSpeed].asInt();
35                 long enemyValueTemp = group[enemyValue].asInt();
36                 // 一波的敌人可能有几种
37                 if (0 != enemyNumTemp)
38                 {
39                     // 将获取的一波敌人的信息赋给敌人组中
40                     groupOfEenemy->addOneGroupEnemy(enemyNumTemp, enemyHpTemp, enemyIndexTmep, enemyRunSpeedTemp, enemyValueTemp);
41                     log("enemyIndexTemp = %d", enemyIndexTmep);
42                 }
43                 else
44                 {
45                     continue;
46                 }
47             }
48             instance->vecGroupOfEnemy.pushBack(groupOfEenemy);
49         }
50         else
51         {
52             continue;
53         }
54     }
55 
56     //for (auto iter = groupDict.begin(); iter != groupDict.end(); ++iter)
57     //{
58     //    std::string strTempGroupFirst = iter->first;
59     //    log("first = %s", strTempGroupFirst.c_str());
60     //    ValueMap& group = iter->second.asValueMap();
61 
62     //    // 当前组中的敌人对象
63     //    GroupOfEnemy *groupOfEenemy = GroupOfEnemy::create();
64 
65     //    // 获取敌人的数量和hp
66     //    char enemyNum[50] = { 0 };
67     //    char enemyHp[50] = { 0 };
68     //    char enemyIndex[50] = { 0 };
69     //    char enemyRunSpeed[50] = { 0 };
70     //    char enemyValue[50] = { 0 };
71     //    for (long i = 0; i <= 3; i++)
72     //    {
73     //        sprintf(enemyNum, "type%dNum", i);
74     //        sprintf(enemyHp, "type%dHp", i);
75     //        sprintf(enemyIndex, "type%dIndex", i);
76     //        sprintf(enemyRunSpeed, "type%dRunSpeed", i);
77     //        sprintf(enemyValue, "type%dValue", i);
78 
79     //        long enemyNumTemp = group[enemyNum].asInt();
80     //        long enemyHpTemp = group[enemyHp].asInt();
81     //        long enemyIndexTmep = group[enemyIndex].asInt();
82     //        long enemyRunSpeedTemp = group[enemyRunSpeed].asInt();
83     //        long enemyValueTemp = group[enemyValue].asInt();
84     //        // 一波的敌人可能有几种
85     //        if (0 != enemyNumTemp)
86     //        {
87     //            // 将获取的一波敌人的信息赋给敌人组中
88     //            groupOfEenemy->addOneGroupEnemy(enemyNumTemp, enemyHpTemp, enemyIndexTmep, enemyRunSpeedTemp, enemyValueTemp);
89     //            log("enemyIndexTemp = %d", enemyIndexTmep);
90     //            log("typeIndex = %s", enemyIndex);
91     //        }
92     //        else
93     //        {
94     //            continue;
95     //        }
96     //    }
97     //    instance->vecGroupOfEnemy.pushBack(groupOfEenemy);
98     //}
99 }

 

同上,

控制台数据:

 

Android中控制台数据

 

原来代码是被注释的代码:

 

原来的Win控制台数据是:

 

对应的Android的控制台数据是:

 

posted @ 2016-02-18 20:32  silent-bobo  阅读(940)  评论(0编辑  收藏  举报