0

我对 Xcode/编程很陌生,并试图修改现有代码

我有一个小问题,我在某个特定时间在屏幕上有大量对象(敌人)并且无法重新定义它们的值。我将我的敌人设置为从屏幕上的 3 开始。

我的目标是根据当前分数改变敌人的数量。

我附上了下面的代码片段。

int numberOfEnemies;

if (self.score>=0) {
numberOfEnemies = 3
}

else if (self.score>=100) {
numberOfEnemies = 4
}


// Setup array 

enemyArray = [[NSMutableArray alloc] init];

for(int i = 0; i < numberOfEnemies; i++) {
    [enemyArray addObject:[SpriteHelpers setupAnimatedSprite:self.view numFrames:3
    withFilePrefix:@"enemyicon" withDuration:((CGFloat)(arc4random()%2)/3 + 0.5)
    ofType:@"png" withValue:0]];
}

enemyView = [enemyArray objectAtIndex:0];

当我的分数更新时,我需要做什么才能将新值解析numberOfEnemies到数组中?

4

1 回答 1

0

我将把我们的谈话变成一个答案,因为我不希望它变得太冗长,我可以轻松地编辑和扩展它。

到目前为止,我们已经确定您遇到问题的原因是您在 viewDidLoad 函数中执行了上述代码,该函数在应用程序首次启动时至少会运行一次。问题在于您已经发现,您没有机会看到新分数,然后更新敌人的数量。

我知道 iOS 的游戏更新循环通常以以下结构完成,但我建议在线查找教程以获取可能更有效/正确的方法。

从您当前的结构中,我将采用您上面的代码并从中创建一个新函数:

-(void) updateDifficulty:(NSTimer *)gameTimer
{
    //This can be the code you have above for now
}

之后,在您的 viewDidLoad 中,我将输入以下代码:

-(void) viewDidLoad:
{
    gameTimer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(updateDifficulty:) userInfo:nil repeats:YES];
    [[NSRunLoop mainRunLoop] addTimer:gameTimer forMode:NSDefaultRunLoopMode];
}

它的作用是声明一个计时器,该计时器将跟踪游戏时间,并根据它的声明方式,每 1 秒调用一次 updateDifficulty 方法。这是您想要的一般结构,但我再次强烈建议您查看 Ray Wenderlich 的游戏教程。

希望有帮助!

于 2012-07-26T08:32:24.553 回答