Я использую Cocos2D для iOS, но вам, скорее всего, не нужно быть знакомым с Cocos2D, достаточно Obj-C, чтобы ответить на мой вопрос.
У меня есть класс врагов при разработке этой игры, которую я использовал в течение долгого времени, но теперь она достигла точки сложности, и мне нужно что-то сделать, чтобы сделать ее более организованной и читабельной.
В настоящее время это работает так: у меня есть вражеский класс, который я выделяю определенное количество раз и вставляю в изменяемый массив. Затем я могу пролистать этот изменяемый массив в любое время. Когда класс противника выделяется, ему также предписывается инициализировать и передать строку имени врага. В его инициализации есть серия операторов if/if else, которые проверяют имя врага и устанавливают для него правильные значения. Это работало просто отлично, за исключением того, что с точки зрения дизайна было очень сложно просматривать все эти имена, когда я добавлял все больше и больше врагов.
То, что я хочу сделать сейчас, это подкласс моего вражеского класса из всех разных врагов. Мне нужно будет получить доступ к свойствам врага, как и к другим видам врагов из этого класса.
Прямо сейчас во вражеском классе init у меня есть что-то вроде:
-(id) initWithEnemy:(NSString *)kind {
if([kind isEqualToString:@"enemyName"]){
//set values
}
else if([kind isEqualToString:@"anotherEnemyName"]){
//set values
}
//etc, etc..
}
Теперь я хочу, чтобы эти заданные значения происходили в других файлах. Один или набор заголовочных/основных файлов для каждого врага. Итак, внутри initWithEnemy я подумал, может быть, я мог бы выделить класс имени врага из переданной «доброй» строки. Не уверен, что смогу использовать NSClassFromString. Я немного поэкспериментировал с ним, но я не совсем уверен, как получить доступ к свойствам класса, как я это делал раньше. Даже если я получил доступ к свойствам так же, как и раньше, означает ли это, что все классы имен врагов должны иметь одинаковое количество свойств?