В target-c, Как сделать переменную доступной из более чем одного класса - PullRequest
0 голосов
/ 02 декабря 2010

в cocos2d для iphone У меня есть два класса:

1- класс GameScene.h

2- класс Player.h

В GameScene.h объявлен этот ярлык ScoreLabel2следующим образом

   @interface GameScene : CCLayer {
    Player* player;
    CCLabel* scoreLabel2;

и класс player.h имеет следующий метод

 -(void)updateScore{
      NSLog(@"%@",scoreLabel2);
 }

Я получаю эту ошибку

          error: 'scoreLabel2' undeclared (first use in this function)

что является лучшим решением дляэта проблема, так как мне нужно будет использовать много объектов и переменных между моими классами?

Большое спасибо

Ответы [ 3 ]

1 голос
/ 02 декабря 2010

Ахмед

Вам необходимо иметь метод updateScore на вашей сцене, а затем вызывать этот метод из класса вашего игрока. Я бы порекомендовал что-то вроде этого:

@interface GameScene : CCLayer {
Player* player;
CCLabel* scoreLabel2;
NSInteger score;
...
}
...
- (void) updateScoreByAmount:(NSInteger)scoreModifier;

и в .m у вас будет что-то вроде:

- (void) updateScoreByAmount:(NSInteger)scoreModifier
{
    score += scoreModifier;  // scoreModifier can be positive or negative
}

тогда в своем классе игрока вы бы вызвали этот метод на вашей сцене, когда хотите изменить счет.

[myScene updateScoreByAmount:5];

Это необходимо изменить в соответствии с вашей ситуацией, но вы должны что-то подобное.

0 голосов
/ 16 декабря 2010

Ответ на ваш вопрос использует Singletons.Здравствуйте, недавно ответил на аналогичный вопрос здесь

Как обмениваться данными между отдельными классами в Java

вы можете сделать то же самое в Objective-C на самом деле должно бытьПример на вики-странице, которую я привожу в ответе.

Пока

Андреа

0 голосов
/ 02 декабря 2010

Вы можете сделать это с помощью [scene valueForKey:@"scoreLabel2"], но это указывает на неприятную проблему с дизайном ваших классов.Вы не правильно объявили интерфейс для GameScene, и в методе updateScore игрока отсутствует ссылка на GameScene.Может быть, это просто опечатка, но вы не должны объявлять целые методы в файле .h.(Не уверен, является ли это геттером или сеттером. Как правило, я бы сделал вывод, что это геттер, потому что у него нет параметра, но я не думаю, что можно предположить что-либо об этом коде.)это наилучшим образом, но, похоже, у вас много работы, чтобы лучше понять ООП.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...