代码之家  ›  专栏  ›  技术社区  ›  marciokoko

为什么我的变量没有在Cocos2d中设置?

  •  0
  • marciokoko  · 技术社区  · 13 年前

    在我的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,但我正在疯狂地试图找出为什么我的生育率没有改变。在我的游戏更新方法中,我这样做:

    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。为什么?

    2 回复  |  直到 13 年前
        1
  •  0
  •   YvesLeBorg    13 年前

    在您的级别中完成例程,而不是:

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

        2
  •  0
  •   Brandon Lassiter    13 年前

    在代码中:

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

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

    推荐文章