0

我遇到了一个小问题:

Player *player1;
Player *player2;
Player *player3;
Player *player4;

Player课堂内,我有一个名为score. 如果我需要更改所有玩家的分数,我使用这个功能:

for (int i = 1; i <= 4; i++)
{
    [self setValue:@"10,000" forKeyPath: [NSString stringWithFormat: @"player%i.score.text", i]];
}

同样在Player课堂上,我有一个名为changeScorePosition. 我想为游戏中的所有“玩家”调用此方法。我该怎么做呢?

4

4 回答 4

1

player1 是全局变量吗?

相反,请尝试创建一个对象来管理所有玩家。然后,该对象可以轻松地遍历所有玩家并更新他们的分数。

于 2012-08-14T20:23:03.767 回答
1

您可以将播放器放在一个数组中,然后使用 i 根据索引调用正确的播放器(尽管它需要从 0 开始)。

NSArray *players = [NSArray arrayWithObjects: player1, player2, player3, player4, nil];


for (int i = 0; i < 4; i++)
{
  Player *currentPlayer = (Player *)[players objectAtIndex:i];
  // do whatever with your player here
}
于 2012-08-14T20:24:31.757 回答
1

最好创建这样的玩家数量,

NSMutableArray *playerArray = [[NSMutableArray alloc] init];

for (int i = 1; i <= 4; i++)
{
    Player *player = [{Player alloc] init];
    [playerArray addObject:player];
    [player release];
}

并调用类似的方法,

for (int i = 1; i <= 4; i++)
{
    [self setValue:@"10,000" forKeyPath: [NSString stringWithFormat: @"player%i.score.text", i]];
    [[playerArray  objectAtIndex:i-1] changeScorePosition];
}

参考这个链接:通过字符串名称或变量访问objective-c对象

于 2012-08-14T20:30:08.840 回答
0

谢谢您的帮助。我更改了一些代码,发现我可以这样做:

[[self valueForKeyPath:[NSString stringWithFormat:@"player%i", i]] performSelector:@selector(playerDeclined)];
于 2012-08-14T20:33:13.727 回答