Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для мобильных телефонов > MidletPascal > Прочие вопросы

Прочие вопросы Вопросы не касающиеся программирования (установка, настройка...)

Ответ
 
Опции темы
Старый 07.11.2008, 09:06   #1
Skythrone
ПроЭктировщик
 
Регистрация: 02.07.2008
Сообщений: 105
Написано 7 полезных сообщений
(для 14 пользователей)
Обработка нажатий кнопок

Сделал мидлет. Полностью свой графический интерфейс. Курсор перемещается обычными кнопками. На эмуляторе - всё ОК.

Раскидал мидлет по знакомым - около 50 разных тестеров. И оказалось, что обработка нажатий кнопок очень тормозит.

Как известно, в MP есть два варианта отлова нажатия: GetKeyPressed (для мгновенного нажатия) и GetkeyClicked (для ситуации нажал-отпустил).

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

В таком виде:

repeat key:=getKeyClicked until key<>0;
реакция на нажатую кнопку происходит через 1.5-2 секунды после самого нажатия.

А в таком виде:

repeat key:=getKeyPressed until key<>0;
нужно вообще давить на кнопку долго и упорно, прежде чем произойдёт реакция.

Телефоны: SE K-700, Nokia 5300 и т.п.

Как быть? Что делать? Что посоветуете?

Может, можно сделать специальную библиотеку для отлова нажатия кнопок более правильным (быстрым) способом ?
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
scimitar (07.11.2008)
Старый 07.11.2008, 11:04   #2
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений
(для 817 пользователей)
Ответ: Обработка нажатий кнопок

Нужно вставлять Delay в цикле обработки нажатий, т.е. что-то типа
repeat
 key
:=GetKeyPressed;
 
Delay(100);
 if 
key=...
until key=0
иначе система не успевает корректно обработать нажатие. Тут хватит 100-200 мс, юзер такую задержку реально не заметит, зато система успеет отреагировать.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Dr.SanX (10.11.2008)
Старый 11.11.2008, 08:18   #3
odd
Мастер
 
Аватар для odd
 
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений
(для 713 пользователей)
Ответ: Обработка нажатий кнопок

Да, сам раньше сталкивался с подобной проблемой. Причем что интересно - чем круче телефон, тем больше тормоза. Зато на самых древних телефонах программа пашет нормально. Избавлялся от демонов - так же. Вставлял Delay(50); и всё работет нормально. Причина тут, видимо, та что я и говорил в хелпе - при выполнении функции Delay телефон не тупо ждет, а на определенное количество миллисекунд позволяет работать другим процессам или приложениям. Если опрос клавы в программе делать без паузы - сам телефон не сможет опрашивать клаву т.к. не будет получать свой квант процессорного времени.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Skythrone (11.11.2008)
Старый 11.11.2008, 12:22   #4
Skythrone
ПроЭктировщик
 
Регистрация: 02.07.2008
Сообщений: 105
Написано 7 полезных сообщений
(для 14 пользователей)
Ответ: Обработка нажатий кнопок

Спасибо за инфо.

А указанная хитрость имеет отношение только к GetKeyPressed, или на GetKeyClicked тоже сработает ?
(Offline)
 
Ответить с цитированием
Старый 11.11.2008, 13:10   #5
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений
(для 817 пользователей)
Ответ: Обработка нажатий кнопок

Тут все дело в том, что код мидлета выполняется в потоке с высоким приоритетом, поэтому вызов любой функции в цикле без задержки не дает системе обрабатывать события. Работа функции Delay основана на приостановке выполнения потока мидлета на указанное время, т.е. вызывая Delay мы останавливаем поток и отдаем процессорное время системе. Так что должно работать и для GetKeyClicked.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Skythrone (11.11.2008)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
нажатие кнопок подряд temned FAQ 24 06.02.2010 11:33
Можно ли сделать так чтобы при нажатии "вверх" и "вниз" двигалась одна картинка, а при нажатии "вправо" и "влево" - другая Total_Nube_&_Lamo Основной форум 2 13.12.2009 22:00
отслежывание нажатий клавиш beZ_probleM Основной форум 7 20.10.2008 01:17
Обработка нажатий клавиш Phantom Программирование 4 24.08.2008 23:02
Отлов нажатий клавиш SkyFox Основной форум 2 27.06.2008 09:42


Часовой пояс GMT +4, время: 22:05.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com