0

在我的 GameManager 单例对象中,我创建:

// 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 没有被改变。在我的游戏更新方法中,我这样做:

if (timeSinceLastRateBump > 3) {
        NSLog(@"DIFFICULTY INCREASES NOW>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
        [[GameManager sharedGameManager] levelComplete];
        timeSinceLastRateBump = 0;
    }

这或多或少地被称为每秒。现在我在我的 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。为什么?

4

2 回答 2

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 并查看该对象中的生成率。

于 2013-04-13T17:27:54.807 回答
0

在代码中:

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

%d 用于双精度值,而不是浮点数。将其更改为 %f。

于 2013-04-16T23:34:51.253 回答