2013-04-13 2 views
0

В моей GameManager объект одноплодной Я творю:Почему моя переменная не установлена ​​в Cocos2d?

// Load levels 
     // Create array property to store level objects 
     self.levels = [[[NSMutableArray alloc] init] autorelease]; 
     //Create 2 level objects with spawnRates 
     Level *level1 = [[[Level alloc] initWithLevelNum:1 spawnRate:10000 bgImageName:@"Icon.png"] autorelease]; 
     Level *level2 = [[[Level alloc] initWithLevelNum:2 spawnRate:10000 bgImageName:@"Icon.png"] autorelease]; 
     Level *level3 = [[[Level alloc] initWithLevelNum:3 spawnRate:80 bgImageName:@"Icon.png"] autorelease]; 
     Level *level4 = [[[Level alloc] initWithLevelNum:4 spawnRate:80 bgImageName:@"Icon.png"] autorelease]; 
     Level *level5 = [[[Level alloc] initWithLevelNum:5 spawnRate:2 bgImageName:@"Icon.png"] autorelease]; 
     Level *level6 = [[[Level alloc] initWithLevelNum:6 spawnRate:1 bgImageName:@"Icon.png"] autorelease]; 
     //Put level objects into array property 
     [_levels addObject:level1]; 
     [_levels addObject:level2]; 
     [_levels addObject:level3]; 
     [_levels addObject:level4]; 
     [_levels addObject:level5]; 
     [_levels addObject:level6]; 
     //Set current level index to 0 
     self.curLevelIndex = 0; 

И далее вниз по линии, я реализую методы называть слоями следующим образом:

- (Level *)curLevel { 
    NSLog(@"curLevelIndex is %d", _curLevelIndex); 
    //returns object at current level index where at start, first slot [0] = spawnrate = 1 
    return [_levels objectAtIndex:_curLevelIndex]; 
} 

- (void)restartGame { 
    _curLevelIndex = 0; 
    [self nextLevel]; 
} 

- (void)levelComplete { 
    NSLog(@"curLevel spawnRate is %d", [self curLevel].spawnRate); 

    //Increase currentlevelindex 
    _curLevelIndex++; 

    if (_curLevelIndex >= [_levels count]) { 
     _curLevelIndex = 0; 
     NSLog(@"resetting levels"); 
    } else { 
     //make it faster 
     //NSLog(@"current level %d", [[_levels objectAtIndex:_curLevelIndex].spawnRate ]; 
     NSLog(@"new level %d", _curLevelIndex); 
    } 

} 

Пожалуйста, простите все NSLogs но им сходит с ума пытаясь выяснить, почему мой spawnRate не изменяется. В методе обновления моей игры я делаю это:

И это называется каждую секунду более или менее. Теперь я получаю это в моем NSLog:

2013-04-13 11:08:22:489 MZ[1408:3079] target added to _targets 
2013-04-13 11:08:23:489 MZ[1408:3079] target added to _targets 
2013-04-13 11:08:24:472 MZ[1408:3079] DIFFICULTY INCREASES NOW>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
2013-04-13 11:08:24:473 MZ[1408:3079] curLevelIndex is 1 
2013-04-13 11:08:24:474 MZ[1408:3079] curLevel spawnRate is 0 
2013-04-13 11:08:24:475 MZ[1408:3079] new level 2 
2013-04-13 11:08:24:509 MZ[1408:3079] target added to _targets 
2013-04-13 11:08:25:506 MZ[1408:3079] target added to _targets 
2013-04-13 11:08:26:522 MZ[1408:3079] target added to _targets 
2013-04-13 11:08:27:490 MZ[1408:3079] DIFFICULTY INCREASES NOW>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
2013-04-13 11:08:27:491 MZ[1408:3079] curLevelIndex is 2 
2013-04-13 11:08:27:493 MZ[1408:3079] curLevel spawnRate is 0 
2013-04-13 11:08:27:494 MZ[1408:3079] new level 3 
2013-04-13 11:08:27:523 MZ[1408:3079] target added to _targets 
2013-04-13 11:08:27:856 MZ[1408:3079] Globals called. Points: 1 
2013-04-13 11:08:27:856 MZ[1408:3079] Globals leaving. Points: 2 
2013-04-13 11:08:28:539 MZ[1408:3079] target added to _targets 

Что доказывает curLevelIndex возрастает от 0 до 1 до 2. Но spawnRate остается на 0. Почему?

+1

не вижу ни одного фрагмента кода, который изменит значение spawnRate – Morion

+0

показать, что ваш класс уровня (сеттеры, геттеры) для spawnRate – YvesLeBorg

+0

spawnRate создается по-разному для каждого экземпляра Уровня. Я создаю экземпляры 6 уровней и помещаю их в массив self.levels. Когда метод levelComplete вызывается, curLevelIndex получает ++ и, следовательно, метод - (Уровень *) curLevel, который возвращает [self.levels objectAtIndex: _curLevelIndex]; должен возвращать уровень в новом curLevelIndex. – marciokoko

ответ

0

в вашей обычной levelComplete, вместо:

NSLog(@"new level %d", _curLevelIndex); 

сделать:

Level* current = [self curLevel]; 
NSLog(@"current level no : %d , spw rate : %f",current.levelNumber,current.spawnRate]; 
// *** WAG for the getters. 

и контрольную точку на бревне. Если ток равен нулю, выведите это. Если нет, проверьте var и посмотрите на скорость появления в этом объекте.

+0

Я все еще получаю 0 для spawnRate. текущий не ноль, я получаю свой уровень с моим назначенным spawnRate и все :( – marciokoko

+0

duh ... используйте% f, чтобы регистрировать скорость вашего появления. то, что вы регистрируете, не то, что у вас есть. – YvesLeBorg

0

в коде:

NSLog(@"curLevel spawnRate is %d", [self curLevel].spawnRate); 

% d используется для двойного значения, а не с плавающей точкой. измените его на% f.

Смежные вопросы