Могу ли я поддерживать VoiceOver в моей игре Cocos2D-iPhone? - PullRequest
4 голосов
/ 28 марта 2012

Я делаю игру, в которой игрок реагирует на звуки с помощью движения - поскольку визуальный элемент не нужен для игры, и многие играют с закрытыми глазами, стыдно, что он не полностью совместим с VoiceOver. В настоящее время я использую Cocos2D-iPhone и CocosDenshion для аудио, и сейчас начинаю думать о том, как я буду строить свою систему меню для выбора уровней и настройки элементов управления.

Достаточно легко поддерживать VoiceOver в системе меню Cocos2D, или я должен попытаться создать мои меню в UIKit, с которыми у меня нет опыта работы?

Ответы [ 2 ]

4 голосов
/ 07 июня 2012

Я не знаю, поддерживает ли система меню Cocos VoiceOver, но если это не так, вы, вероятно, могли бы добавить нужную вам функцию, не углубляясь в большую работу UIKit.Все, что вам нужно сделать, это создать подкласс UIView, который добавляется в главное окно при запуске приложения.Затем используйте протокол UIAccessibilityContainer и вызовы UIAccessibilityPostNotification, чтобы пользователи могли взаимодействовать с вашей игрой через VoiceOver.

Протокол UIAccessibilityContainer позволяет сообщать VoiceOver, какие элементы интерфейса в данный момент находятся на экране, их метки,их черты и т. д. VoiceOver затем использует эту информацию, чтобы позволить пользователям перемещаться между элементами и получать отзывы о них.

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

UIAccessibilityPostNotification (UIAccessibilityLayoutChangedNotification, nil)

..., чтобы сообщить VoiceOver об изменении макета экрана.А чтобы просто что-то сказать через VoiceOver, скажем, когда состояние вашей игры изменилось, вы можете отправить другое уведомление, чтобы произнести какой-то текст:

UIAccessibilityPostNotification (UIAccessibilityAnnouncementNotification, @ "Достижение разблокировано!");

0 голосов
/ 28 марта 2012

Нет необходимости использовать UIKit framework, вы можете использовать нативные методы и класс cocos2d для реализации этого.

Для опции звука у нас есть SimpleAudioEngine, который можно использовать.Вы можете различить звук, используя его идентификатор, который имеет тип ALuint.

ALuint soundEffectID;

//to start
soundEffectID=[[SimpleAudioEngine sharedEngine] playEffect:@"my sound"];
//to stop
[[SimpleAudioEngine sharedEngine] stopEffect:soundEffectID];

Вы должны управлять этим эффектом, и я думаю, что ваша проблема будет решена.

...