void EnemyCache::initEnemies() { // create the enemies array containing further arrays for each type enemies = CCArray::create(); enemies->initWithCapacity(EnemyEntity::EnemyType_MAX); enemies->retain(); // create the arrays for each type for (int i = 0; i < EnemyEntity::EnemyType_MAX; i++) { // depending on enemy type the array capacity is set to hold the desired number of enemies int capacity; switch (i) { case EnemyEntity::EnemyTypeVirus: capacity = 50; break; // case EnemyEntity::EnemyTypeBoss: // capacity = 1; // break; default: break; } // no alloc needed since the enemies array will retain anything added to it CCArray* enemiesOfType = CCArray::create(); enemiesOfType->createWithCapacity(capacity); enemiesOfType->retain(); enemies->insertObject(enemiesOfType, i); } for (int i = 0; i < EnemyEntity::EnemyType_MAX; i++) { CCArray* enemiesOfType = (CCArray*)enemies->objectAtIndex(i); int numEnemiesOfType = enemiesOfType->capacity(); for (int j = 0; j < numEnemiesOfType; j++) { EnemyEntity* enemy = EnemyEntity::enemyWithType(i); batch->addChild(enemy, 0, i); enemiesOfType->addObject(enemy); } } }