Управление в java-играх (мидлетах). Известные проблемы и некоторые способы их решения.Не секрет, что поддержка java в девайсах на платформе PocketPC на сегодняшний день реализована крайне плохо. Возможности как встроенных в прошивку эмуляторов java, так и имеющихся для свободного скачивания из сети, сильно ограничены по сравнению с ява-машинами мобильных телефонов и смартфонов на ОС Symbian. Отсутствие поддержки спецклассов производителей телефонов (Nokia, Siemens, Motorola и т.д.), неполная реализация стандандартных спецификаций J2ME, а также отсутствие поддержки расширенных спецификаций java, приводит к невозможности установки большей части мидлетов на PocketPC.
Решение этой проблемы целиком на совести разработчиков эмуляторов java, которые предлагают девелоперам (производителям девайсов) полные версии эмуляторов с улучшенной совместимостью, наличием библиотек спецклассов мобильных телефонов, расширенных спецификаций и полной поддержкой J2ME за такие огромные деньги, которые те, скорее всего, никогда им не заплатят. А те намного более дешевые версии эмуляторов java, которые устанавливаются в прошивку девайсов их производителями, представляют из себя максимально урезанные варианты полных версий. Эти версии, кстати, и доступны для загрузки из сети, и именно о них написано выше. Полные версии в интернете недоступны ни в каком виде, нет даже демо или триал версий.
Однако проблема не заканчивается лишь ограничением количества мидлетов, которые возможно установить в эмуляторах java. Это только цветочки.
После "успешной" установки мидлета в Менеджер Мидлетов зачастую оказывается, что при его запуске девайс или зависает намертво (причем дело может дойти до хард-ресета), или мидлет вылетает с ошибкой (иногда вообще без каких-либо сообщений). Причем как при самом запуске, так и во время работы/игры в любой момент, чаще всего через 1 - 5 минут после начала работы/игры. Эта проблема также обусловлена, как и проблема с установкой, плохой совместимостью доступных эмуляторов java с кодами мидлетов, написанных для мобильных телефонов (хотя написаны эмуляторы java как раз для запуска мидлетов от мобильных телефонов!).
Решение проблемы то же, что и выше описанное - возможность доступа к новым, полным, более качественным версиям эмуляторов.И вот наконец мидлет успешно установлен и успешно запущен. Ваш любимый еще с мобильного телефона
SplinterCell: Double Agent после прохождения заставок предлагает выбрать - воспроизводить звук в игре, или нет. И ждёт Вашего ответа Yes или No, который возможен только в виде нажатия левой или правой телефонной софт-клавиши.
Тут мы сталкиваемся с ещё одной проблемой современных доступных эмуляторов java для PocketPC - полным отсутствием эмуляции нажатий телефонных софт-кнопок. Эта беда делает невозможным запуск примерно половины из тех java игр, которые смогли нормально установиться в эмуляторы java для PocketPC. После появления такого вопроса на дисплее почти всегда единственным выходом из ожидания ответа остаётся закрытие java игры "крестом". После этого и на самой java игре можно ставить крест и удалять её из Менеджера Мидлетов. Причем последствия этого сказываются почти во всех мидлетах, которые при запуске не требуют подтверждающих/отменяющих операций с использованием телефонных софт-клавиш, и которые благодаря этому можно запускать. Они работают нормально только до тех пор, пока не становится необходимым нажатие именно телефонной софт-кнопки. В результате на сегодняшний день (ноябрь 2006г.) становится возможным полноценное использование только тех малочисленных мидлетов, в которых либо всё управление полностью выполняется джойстиком (пример - игра
Freestyle Moto X2), либо действия софт-кнопок дублируются в мидлете кнопками * и # (пример - игра
Splinter Cell: Pandora Tomorrow). Подчеркну в связи с вышеизложенным - всё управление в мидлете (т.е. кнопки, которые в нём используются) заложено в самом мидлете программистами, его написавшими, и от эмулятора java не зависит.
Эта проблема на платформе PocketPC пока не имеет решения. Никакие возможные кнопки виртуальной клавиатуры, включая хард-кнопки девайсов (которые вообще не перехватываются), не заставляют существующие эмуляторы java посылать в работающий мидлет коды, эмулирующие нажатия телефонных софт-кнопок. При запуске мидлетов, написанных под старую платформу MIDP 1.0, и
TAO Intent Java MIDlet manager, и
IBM J9 WEME MIDP20 JMM, и
Coretek Delta java manager позволяют эмулировать софт-кнопки в виде виртуальных кнопок в нижнем баре на экране девайса. Нажимать на них необходимо стилусом. Для мидлетов, написанных на платформе MIDP 2.0, такую эмуляцию обеспечивает только
Coretek Delta java manager, причем не для всех мидлетов. Такой странный ход разработчиков эмуляторов java сложно объяснить. Решение этой проблемы очевидно, и не может быть сложным в реализации для авторов. Причем в случае с
TAO Intent Java MIDlet manager вообще налицо "саботаж". Версия для PocketPC лишена поддержки софт-клавиш (нажатия F1 (код 70 hex) и F2 (код 71 hex) игнорируются), версия для Windows Mobile for Smartphone их отлично эмулирует.
Одним из частных решений проблемы с запуском мидлетов на старте, когда необходимо ответить на вопрос нажатием левой или правой телефонной софт-клавиши, является нажатие цифры 5, символов * либо # на виртуальной клавиатуре девайса, а также нажатие джойстика. Эмуляция нажатий данных кнопок эмуляторами java выполняется корректно, кроме эмулятора
Coretek Delta java manager, который, хотя и эмулирует нажатие джойстика, однако нажатия 5, * и # эмулировать отказывается.
Поправка. С 10.01.2007 на форуме стала доступна версия 11.1.7.1023 эмулятора TAO Intent Java MIDlet manager - TAO Runtime JTWI 1.0 для ОС Windows Mobile 5.0, в которой добавлена поддержка эмуляции телефонных софт-клавиш и внесён ещё целый ряд улучшений.Итак, игра запустилась, нажатий телефонных софт-кнопок не потребовалось, и вы готовы разобраться со всеми террористами на Земле вместе с Сэмом Фишером (игра
Splinter Cell: Extended Ops). Но что это такое?!!
Джойстик не работает!Неработоспособность или частичная работоспособность джойстика связана с тем, что мидлет ожидает в качестве кодов команд джойстика (вверх, вниз, влево, вправо, выбор) вовсе не те коды, которые ему передаёт эмулятор java. В результате в мидлете джойстик оказывается нерабочим. Здесь следует добавить, что все команды нажатий кнопок виртуальной клавиатуры или джойстика пользователем поступают в мидлет через "переводчик", в качестве которого выступает эмулятор. При этом разные эмуляторы java генерируют разные коды для одних и тех же кнопок. Пример:
Скан-коды
TAO Intent Java MIDlet manager.
джойстик вверх = -57377/1
джойстик вниз = -57378/6
джойстик влево = -57379/2
джойстик вправо = -57380/5
джойстик нажатие = 13/8
Скан-коды
IBM J9 WEME MIDP20 JMM.
джойстик вверх = -1/1
джойстик вниз = -2/6
джойстик влево = -3/2
джойстик вправо = -4/5
джойстик нажатие = -5/8
Решение данной проблемы возможно лишь в тех мидлетах, в которых заложено разработчиками дублирование джойстика на цифровые кнопки мобильного телефона. Эмуляция их нажатий эмуляторами java выполняется корректно (исключение составляет лишь
Coretek Delta java manager). При этом их соответствие в большинстве мидлетов определяется следующим образом:
джойстик вверх = 2
джойстик вниз = 8
джойстик влево = 4
джойстик вправо = 6
джойстик нажатие = 5
Проблема с джойстиком не последняя.
Замыкает парад ограничений использования мидлетов на PocketPC некорректное программное взаимодействие виртуальной клавиатуры с запущенным в эмуляторе java мидлетом. Визуально это проявляется в неприятных глюках, например, в игре
Splinter Cell: Extended Ops при нажатии на виртуальной клавиатуре кнопки 6 Сэм начинает бежать вперёд без остановки, пока не наступает на мину и не подрывается, или после каждого нажатия действие выполняется один раз, после чего всё тормозится, и для следующего действия необходимо, к примеру, нажимать последовательно кнопки *, а затем #. Также возможна лишь частичная работа ряда кнопок 2, 4, 5, 6, 8. Проявлений может быть множество, все их просто не описать, да это и не нужно - то, что что-то работает не так, будет заметно сразу.
Источником данной проблемы являются используемые на девайсе программы виртуальных клавиатур. Поведение управления в мидлетах при использовании разных клавиатур может очень существенно отличаться - от полной невозможности до стабильной и нормальной работы. Причина глюка управления так мной точно и не установлена. Есть лишь предположение, что дело тут в том, как эмулятор передаёт их команды в запущенный мидлет. Т. е. эмулятор "доносит" до работающего мидлета команды пользователя с клавиатуры в таком формате, в каком он получает их от ОС, а мидлет, написанный под KVM и ОС определённого телефона, и формат команд ожидает соответствующий. Абстрактный пример: эмулятор передал в мидлет команду с клавиатуры "Пользователь Нажал Кнопку 5 - Пользователь Отпустил Кнопку 5", но мидлет понимает только такой формат "Пользователь Нажал Кнопку 5 - Пользователем Прекращено Нажатие Кнопки 5". Из-за этого и возникает некорректное программное взаимодействие.
Мною была проведена работа по изучению поведения управления в мидлетах с использованием различных виртуальных клавиатур, доступных в
Карте Форума. Удовлетворительные результаты дают
QKeys,
LEng и
Keyboard+. Лучше всех показала себя
Resco Keyboard Pro, но небольшие проблемы есть и с ней (к примеру, в играх
Sven и
SpiderMan). Повторяемость результатов была 100%. Использовалось более сотни мидлетов. На этом, собственно, и хотел завершить тест виртуальных клавиатур, однако знание о наличии проблемы во всех протестированных клавиатурах постоянно свербило у меня в голове, заставляя искать клавиатуры, не описанные на форуме, пока я не вспомнил о бесплатном лайт-русификаторе от МакЦентра
PocketRussKey, в состав которого и входила не изученная мной полноценная виртуальная клавиатура.
Результат оказался наилучший! Более того, не было зафиксированно ни одной проблемы с управлением во всех используемых мидлетах! Можно с большой долей уверенности говорить о том, что проблемы некорректного программного взаимодействия мидлетов с данной клавиатурой просто не существует. Однако установка бесплатного лайт-русификатора от МакЦентра PocketRussKey имеет свои особенности. Это ПО - всё таки русификатор, и установка русификатора поверх другого русификатора может быть чревата для девайса серьёзными глюками. Если изначально Вы - счастливый обладатель системы русификации от МакЦентра, то можете смело пропускать эту часть, если нет - читайте дальше. Если на Вашем девайсе данная проблема никогда Вам пока не встречалась, отлично! Возможно, что вы её никогда и не получите. К примеру, на Qtek 9100 при использовании родной виртуальной клавиатуры эта проблема не проявляется.
Итак, заканчиваю критику и аргументацию, и перехожу к позитивным предложениям.Если Вы решили пользоваться java-играми (мидлетами) и при их запуске обнаружили проявление последней описанной в данном сообщении проблемы с управлением,
решением проблемы станет установка PocketRussKey lite:
1. Делаете полный бэкап системы, чтобы в случае возникновения проблем в работе Вашего PocketPC после установки PocketRussKey lite Вы смогли сделать хард-ресет и через рестор вернуться к состоянию до установки ПО от МакЦентра.
2. Поскольку после установки PocketRussKey встроенная в него Клавиатура станет клавиатурой Вашего PocketPC по умолчанию, для получения возможности быстрого восстановления загрузки по умолчанию привычной клавиатуры экспортируйте с помощью любого редактора реестра ветку HKEY_CURRENT_USER ControlPanel\Sip. Reg-файл лучше всего скопировать на карту памяти, чтобы в случае возможного хард-резета не повторять эту процедуру вновь.
3. Скачиваете приаттаченный к сообщению архив
keyboard.zip и распаковываете его.
Если Ваш PocketPC работает под управлением Windows Mobile 2003/SE, то необходимо распаковать вложенный архив
Pocket_RussKey_2.1b_lite.zip. Данная версия дана мной в виде установочного cab-файла
MacCentre_Pocket_RussKey_2003.cab.
Использовать эту версию на девайсах, работающих под управлением Windows Mobile 5.0, нельзя!Если Ваш PocketPC работает под управлением Windows Mobile 5.0, то необходимо распаковать вложенный архив
Pocket_RussKey_2.12_lite.zip. Данная версия устанавливается на PocketPC только с ПК через ActiveSync запуском на нём дистрибутива
MacCentre_Pocket_RussKey_2003.ехе. Cab-файл не создаётся.
4. Устанавливаете PocketRussKey на свой девайс,
выбрав при установке lite версию программы. По окончании установки производите софт-ресет своему PocketPC.
5. После этого ОБЯЗАТЕЛЬНО удалите из папки \Windows\ файл шрифта bkdings.ttf (для Windows Mobile 2003/SE); или kkbdsym.ttf, либо prkkbdsym.ttf (для Windows Mobile 5.0). Если просто так сделать это не получается, переименуйте его, к примеру, в bkdings.tt или kkbdsym.tt (либо prkkbdsym.tt) и еще раз выполните софт-ресет. Теперь у Вас получится его, переименованный, удалить. Либо его можно удалить без проблем через ActiveSync с ПК.
6. После установки PocketRussKey встроенная в него Клавиатура стала клавиатурой Вашего PocketPC по умолчанию. Чтобы восстановить загрузку по умолчанию привычной клавиатуры, запустите reg-файл, который предварительно, до установки PocketRussKey, был Вами экспортирован из реестра (см. пункт 2).
Если же ветка реестра HKEY_CURRENT_USER ControlPanel\Sip своевременно не была Вами экспортирована, значение параметра HKEY_CURRENT_USER ControlPanel\Sip\DefaultIm можно будет восстановить вручную. Для этого замените его значение DefaultIm в соответствии с приведенными ниже справочными данными для различных клавиатур:
{42429667-ae04-11d0-a4f8-00aa00a749b9} = Keyboard
{51A2CB38-154E-4C92-A625-A83871C99EC2} = Phone Pad
{42429690-ae04-11d0-a4f8-00aa00a749b9} = Letter Recognizer
{42429691-ae04-11d0-a4f8-00aa00a749b9} = Block Recognizer
{991A1001-9DCB-11d3-B3C2-000000000000} = AccessPanel
{1E03E205-12D7-4d82-963E-C01889F2EC10} = Claviature
{95BDB641-772F-11d2-AC6B-204C4F4F5020} = Fitaly
{52429695-AE04-11D0-A4F8-00AA00A749B9} = FleXslide
{4EAD10BD-83AC-44b9-99AE-71958C1B0F0E} = InPad
{C099F78A-924E-4814-A8CF-54E7BD8C2124} = JetKeys
{4128DEE4-EE84-4338-A261-CC704CB32C19} = NanoPad
{42429695-AE04-11D0-A4F8-00AA00A749B9} = NullKB
{025ECAC2-075B-4b82-A972-05E4C17719EA} = PDAMedia Excel
{FA957346-A925-4b68-B9E1-D3D0310F4433} = PDAMEdia KBD
{DE6510EF-6691-401D-B1D3-B9074BFD1555} = PHM Character Map
{81FC2CAD-AD71-4793-9464-36D27630E584} = PHM Clipboard Pane
{9DD23292-0AB3-48F2-A245-0713652A8CEE} = PHM Ext. Keyboard
{FFFD6819-FF21-4e93-B844-A1BBF986B55C} = QuikWriting
{991A1000-9DCB-11d3-B3C2-000000000000} = RapidCalc
{A070BE16-AD56-11d3-BC77-00C06C512035} = Resco Keyboard Pro
{7F0854D9-9ADA-45A9-A3A2-189D9BE8A653} = Smilies Input Panel
{26F56EF0-2CE8-4C46-ADC8-FE0A7DF12DD1} = SPB Fullscreen Keyboard
{5efab5bd-0af5-48f8-abec-6f36e3a0b5af} = TenGo
{8A7968F3-677B-4F64-859C-8A49FCCCB9BF} = TextPlus
{A5304BFA-CC1D-493f-87D3-D9C17147FA32} = TopKey
{4345EA53-B8A5-4E24-A14A-F7C34DD78077} = WordLogic
{D79FF5E2-3F2D-4EDF-9DFA-8EDAE42024BB} = qkeys от Кварты
Если нужной Вам клавиатуры нет в этом списке - тогда хард-резет, все заново, и не забываем о пункте 2.
На этом установка PocketRussKey завершена. Одновременная работа в девайсе двух русификаторов при установке PocketRussKey по приведённой выше инструкции не будет сопровождаться ошибками и глюками. Это проверено на HP iPAQ h5550 Windows Mobile 2003, iMate JAM Windows Mobile 2003SE PE, а также Asus P535 и Qket S200 на Windows Mobile 5.0. На моём девайсе HP iPAQ h5550 иногда Клавиатура запускается с задержкой, выдавая такое сообщение об ошибке:
После секундной паузы всё приходит в норму.
Вид меню настроек на вкладке "Личные" HP iPAQ h5550 Windows Mobile 2003.
Вид меню настроек на вкладке "Личные" iMate JAM Windows Mobile 2003SE PE.
Вид меню настроек PocketRussKey на HP iPAQ h5550
Вид меню настроек PocketRussKey на iMate JAM
Как видите, все замечательно и мирно сосуществует. Но если вопросы и проблемы всё же появятся, обязательно здесь в теме о них пишите.
7. Как я уже отметил выше, наилучшее управление из протестированных виртуальных клавиатур обеспечивают Клавиатура от МакЦентра, входящая в состав PocketRussKey, и Resco Keyboard Pro. При их использовании, если в java игре не работает джойстик, удобно использовать раскладку, повторяющую блок цифровых клавиш обычных клавиатур. На обычной раскладке с рядом цифровых кнопок игровой процесс - сплошное мучение.
HP iPAQ h5550
Однако в java играх, написанных для мобильных телефонов, 8 - это вниз, а 2 - это вверх (такая раскладка цифровых клавиш мобильных телефонов), но на цифровом блоке компьютерных клавиатур 8 - вверху, а 2 - внизу. Не знаю, как Вам, но мне в java играх на компьютерной раскладке бегать без ошибок не получалось. Автоматом, заигравшись, жму 8, расположенную вверху, и жду движения вверх, но получаю перемещение вниз, совершенно мне не нужное. Поэтому в приаттаченном архиве Вы можете найти переделанный мной файл
keyboard.dll для PocketRussKey, заменив которым оригинальный файл в папке \Program Files\RussKey\Keyboard\, можно значительно улучшить и сделать комфортней игровой процесс. Предварительно не забудьте сделать резервную копию оригинального keyboard.dll для возможности восстановления работы программы. Если просто так заменить исходный файл не получается, переименуйте его, к примеру, в keyboard.dl. Если Вы используете автоматический уборщик мусора на старте девайса типа
Remover или
SKTools от
S_K,
ОБЯЗАТЕЛЬНО разово отключите эту функцию в программе-уборщике, и только после этого выполните софт-ресет. Теперь у Вас получится удалить исходный переименованный файл и записать вместо него обновлённый. Либо его можно удалить без проблем через ActiveSync с ПК. Данный файл может использоваться как на девайсах с Windows Mobile 2003, так и на девайсах с Windows Mobile 5.0 с отключенной проверкой сертификатов.
ВНИМАНИЕ !!! Имеются данные о следующих проблемах, возникших при замене
keyboard.dll на девайсах с Windows Mobile 5.0:
1. Если PocketRussKey используется как клавиатура по умолчанию, то после указанной замены девайс не выходит из софт-резета, зависает на белом экране, и выводится из этого состояния только хард-резетом. Поэтому НЕОБХОДИМО сразу же после замены keyboard.dll
ОБЯЗАТЕЛЬНО восстановить указанным выше способом (пункт 6) загрузку по умолчанию клавиатуры, которая использовалась в этом качестве до установки PocketRussKey. В противном случае, как уже было сказано, хард-резет гарантирован (проверено на Asus P535, Qtek S200 и I-Mate Jamin).
2. На I-Mate Jamin при замене keyboard.dll возникала локальная проблема конфликта с ранее установленной Resco Keyboard Pro. После замены dll'ки и восстановления дефолтной Sip девайс все равно зависал на белом экране, пока Resco Keyboard Pro не была удалена полностью, включая записи в реестре, которых удалители не видят (записи в реестре ищутся поиском по словам "Resco Keyboard"). После установки PocketRussKey, замены keyboard.dll и двойного софт-резета Resco Keyboard Pro замечательно установилась заново как клавиатура по умолчанию.
HP iPAQ h5550
iMate JAM
Переделкой keyboard.dll для PocketRussKey я не ограничился. В архиве также находится cab-файл скина для Resco Keyboard Pro
RKbdBlackSkin_p_QVGA.CAB, который необходимо установить в папку установки клавиатуры. После этого оригинальные файлы
Numeric.map и
NumSmall.png можно будет заменить без сложностей на приложенные в архиве, и
выбрать в настройках Resco Keyboard Pro скин Black. В результате в играх получится следующее:
HP iPAQ h5550
Данная модификация клавиатуры работает на девайсах и с Windows Mobile 2003/SE, и с Windows Mobile 5.0.
На этом всё. Выражаю благодарность
rendor-у за неоценимую помощь и тестирование PocketRussKey на свой страх и риск.
Прикрепленные файлы
keyboard.zip ( 383.33 КБ )