Разработчик игр для iPhone: структура достижений?

Я написал простую игру и хочу интегрировать в нее достижения GameCenter.

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

Как я вижу, достижение имеет следующие вещи:

  • «Группа» триггеров (например, в конце игры, при столкновении и т. д.)
  • Зависимость (например, вы не можете получить «10 золотых звезд», пока не получите «5 золотых звезд»).

Основываясь на этом, я попытался написать одноэлементный класс, который читал бы полный список (из plist) достижений, каждое из которых сгруппировано по классу триггера и его зависимостям. Этот синглтон позволял другим классам регистрировать @selector()-подобные обратные вызовы для групп триггеров (например, «при триггере 'game_end' вызвать эту функцию"). Затем эти триггеры можно было бы аккуратно активировать в определенных точках моей игры. Получилась аккуратная, почти «абстрактная» система, которую я мог использовать в будущих играх.

Затем катастрофа; Я получаю EXC_BAD_ACCESS ошибок, которые я могу только предположить, потому что я связываю @selector обратных вызовов из нестатического класса в статический одноэлементный класс. Ошибка появляется в этой строке:

GCAchievementsHelper *h = [GCAchievementsHelper sharedInstance];
[h addEventListener:@"game_end" target:self selector:@selector(achievementHandlerGameEnd:)];

Я предполагаю, что это потому, что «я» (игровой слой) не может быть передано в статический синглтон?!

Я действительно не хочу разбрасывать тонны повторяющихся операторов IF по своему коду, чтобы проверить все условия, которые мне нужны для достижения... Если это вообще возможно!

Подводя итог, мой вопрос:

Кто-нибудь знает о системе достижений? Он не обязательно должен быть совместим с GC/OpenFeint или даже с ObjC — даже псевдокод был бы великолепен.


person Nick    schedule 19.10.2011    source источник


Ответы (1)


Есть несколько фреймворков GameCenter с открытым исходным кодом, которые могут использовать некоторую нагрузку от вас.

GameCenterManager, который следует шаблону синглтона и довольно "легкий"

Кэш iOS Game Center – это полнофункциональная платформа Game Center.

Я бы посоветовал вам посмотреть на них обоих...

Удачи :)

person Goles    schedule 25.10.2011
comment
Оба они выглядят фантастически - спасибо за ссылки. Хотя оба выглядят так, будто им требуется, чтобы игра сообщила им, что достижение было достигнуто. Мне все еще нужно найти способ определения достижений (как с точки зрения триггера, так и с точки зрения зависимостей/требований) абстрактным способом. - person Nick; 25.10.2011
comment
Для этого вы можете использовать SQLite, как предлагает этот парень ( reedolsen .com/how-to-develop-achievements-for-iphone-games ) то, что вы могли бы имитировать. По сути, вы просто отслеживаете статистику с помощью SQLite, а затем можете создать триггер для проверки заработанных достижений. - person Goles; 25.10.2011