Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Java ME (J2ME) > Работа с временным циклом |
Автор: MMA 30.12.2005, 16:04 |
Необходимо переместить объект на заданное количество в задданое направление с заданным шагом и временем(например, вверх на 20 пикселей с шагом 5 пикселей и временем на 1 шаг равным 0.2 секунды). Класс таймера создавать ой как не хочеться... Вместо этого хотелось бы сделать следующее: Примерный код: for (int i = 0; i < пиксели / шаг; i++) { //перемещаем объект в заданном направлении ...перемещаем... // Необходимо подождать чтобы было видно // как красиво перемещается объект ...ждёмс заданное время... } Кто-нибудь знает как это реализовать строчку "...ждёмс заданное время..." без заведения класса таймера, но с заведением для этой цели любых необходимых переменных? |
Автор: Dancer 30.12.2005, 17:12 |
try { Thread.sleep(200); } catch(Exception e) { e.printStackTrace(); } к твоим запросам подходит, но это применять не очень хорошо!!! |
Автор: MMA 2.1.2006, 18:49 |
Почитал тут про эти потоки. Только не пойму: почему тормозить основной поток(или вообще стопорить, я не понял... но ведь таймеры стопорят свой поток, как я понимаю) не хорошо. У этого способа я разглядел только плюс(в данном случае плюс): Игрок не може ничего сделать пока объект не переместиться. А какие минусы? |
Автор: batigoal 2.1.2006, 20:08 | ||
Интервалы могут быть неравномерными. Ведь никто тебе не гарантирует, что весь остальной код будет выполнятся, скажем, 5 мс. Он может выполниться один раз за 5 мс, а второй раз за 15. И интервал получится в одном случае 205 мс, а второй раз - 215. |
Автор: Nemesis 4.1.2006, 15:57 | ||
Если тебе нужно реально затормозить свой поток и не дать проге идти дальше выполняться,то есть два банальных способа: 1) Описал Dancer просто остановить поток ( но это не правильно... вообще что-либо делать с потоками - это большое зло, поскольку в j2me проблема многопотоковости просто кошмарна). 2) Это создать простую функцию возвращающую boolean, которая просто берет разницу между текущим временем и временем с которого начался отсчет и в случае, если разница больше/равно нужной выдержки, то возвращаем true иначе false. А функцию эту вызывать в бесконечном цикле. Вот пример,чтобы было нагляднее
Но это приостановит полностью выполнение проги( будут работать только параллельные потоки). P.S. Что за трабл с кодом? Он у меня в сообщении в одной строчкой почему-то идет ![]() |
Автор: batigoal 4.1.2006, 16:55 | ||
Издержки ввода нового дизайна. Скоро исправят. |