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 に答える