Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 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
Цитата(MMA @ 2.1.2006, 19:49)
А какие минусы?

Интервалы могут быть неравномерными. Ведь никто тебе не гарантирует, что весь остальной код будет выполнятся, скажем, 5 мс. Он может выполниться один раз за 5 мс, а второй раз за 15. И интервал получится в одном случае 205 мс, а второй раз - 215.

Автор: Nemesis 4.1.2006, 15:57
Если тебе нужно реально затормозить свой поток и не дать проге идти дальше выполняться,то есть два банальных способа:
1) Описал Dancer просто остановить поток ( но это не правильно... вообще что-либо делать с потоками - это большое зло, поскольку в j2me проблема многопотоковости просто кошмарна).
2) Это создать простую функцию возвращающую boolean, которая просто берет разницу между текущим временем и временем с которого начался отсчет и в случае, если разница больше/равно нужной выдержки, то возвращаем true иначе false. А функцию эту вызывать в бесконечном цикле. Вот пример,чтобы было нагляднее

Код

for (int i = 0; i < пиксели / шаг; i++) {

//перемещаем объект в заданном направлении
//...перемещаем...
// Необходимо подождать чтобы было видно
// как красиво перемещается объект

 time = System.currentTimeMillis(); // time - просто long`овская переменная

 for(;;)
 {
  if(waitTime(200)
   break;
 }
}

boolean waitTime(long timeDelta)
{
 if(System.currentTimeMillis() - time > timeDelta)
  return true;
 return false;
}

Но это приостановит полностью выполнение проги( будут работать только параллельные потоки).

P.S. Что за трабл с кодом? Он у меня в сообщении в одной строчкой почему-то идет smile(

Автор: batigoal 4.1.2006, 16:55
Цитата(Nemesis @ 4.1.2006, 16:57 Найти цитируемый пост)

P.S. Что за трабл с кодом? Он у меня в сообщении в одной строчкой почему-то идет

Издержки ввода нового дизайна. Скоро исправят.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)