快乐塔防项目中的获取关卡信息,读取的是.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的控制台数据是: