понедельник, 4 июня 2012 г.

upSL - кроссплатформенная обертка для Scoreloop

Давно уже хотели выложить на github, да всё как-то руки не доходили.

Про upSL

Итак, наша кроссплатформенная обертка для игр, разрабатываемых с помощью cocos2d-x и использующих Scoreloop - upSL.

Когда мы в Run In Crowd решили отказаться от OpenFeint в пользу Scoreloop, то встал вопрос о том, как организовать  работу с его функциями в приложения.

Требования были такими:

  • API должно быть кроссплатформенным
  • Контроллеры должны создаваться из игрового кода
  • Нежелательно создание лишних объектов, оборачивающих функционал сущностей Scoreloop

В итоге, пришли к такому вот решению. Покрыт не весь функционал, только то, что нам понадобилось.

Про Scoreloop

Пока разбирались, нашли несколько багов в Scoreloop, самые неприятные - в ios версии. Будем надеяться, исправят. Вообще, scoreloop достаточно капризный, например, нельзя разблокировать ачивку, если еще осуществляется синхронизация. Мелочь, но, в итоге, приходится в коде создавать дополнительные механизмы для обхода таких ограничений.

Про сложности

Больше всего кода требуется для android, в данный момент это более 1700 строк jni_scoreloop.cpp. Кроме того, что jni сам по себе трудоемкий, дополнительные проблемы создает то, что часть функций должна вызываться в ui-thread'е, поэтому их пришлось реализовывать в Scoreloop.java c предоставлением доступа нативной части обертки. При этом, callback вызванный Scoreloop'ом после выполнения запроса должен быть вызван в render-thread'е, в котором крутится игровая логика.

Будем рады, если кому-нибудь пригодится :)

Комментариев нет:

Отправить комментарий