Модераторы: javastic, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с временным циклом, Как без таймера отмерять отрезки времени 
:(
    Опции темы
MMA
Дата 30.12.2005, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 23.12.2005

Репутация: нет
Всего: нет



Необходимо переместить объект на заданное количество в задданое направление с заданным шагом и временем(например, вверх на 20 пикселей с шагом 5 пикселей и временем на 1 шаг равным 0.2 секунды).
Класс таймера создавать ой как не хочеться...

Вместо этого хотелось бы сделать следующее:
Примерный код:

for (int i = 0; i < пиксели / шаг; i++) {
//перемещаем объект в заданном направлении
...перемещаем...
// Необходимо подождать чтобы было видно
// как красиво перемещается объект
...ждёмс заданное время...
}

Кто-нибудь знает как это реализовать строчку "...ждёмс заданное время..." без заведения класса таймера, но с заведением для этой цели любых необходимых переменных?
PM MAIL   Вверх
Dancer
Дата 30.12.2005, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 29.4.2005
Где: Nizhniy Novgorod

Репутация: 33
Всего: 37



try {
Thread.sleep(200);
} catch(Exception e) {
e.printStackTrace();
}

к твоим запросам подходит, но это применять не очень хорошо!!!


--------------------
У программистов есть великая тайна: всё, что только можно, было давно кем-то когда-то написано. Разработчику только нужно знать в какое место кода какие строчки вставить! smile
PM MAIL   Вверх
MMA
Дата 2.1.2006, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 23.12.2005

Репутация: нет
Всего: нет



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

А какие минусы?

PM MAIL   Вверх
batigoal
Дата 2.1.2006, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 1
Всего: 151



Цитата(MMA @ 2.1.2006, 19:49)
А какие минусы?

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


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Nemesis
  Дата 4.1.2006, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 20.2.2005
Где: Москва

Репутация: 3
Всего: 5



Если тебе нужно реально затормозить свой поток и не дать проге идти дальше выполняться,то есть два банальных способа:
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(

Это сообщение отредактировал(а) Nemesis - 4.1.2006, 16:01
--------------------
PM MAIL   Вверх
batigoal
Дата 4.1.2006, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 1
Всего: 151



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

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

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


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

  • Прежде чем задать вопрос прочтите это!
  • Литература по Java находится здесь.
  • Литературу по Java обсуждаем здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда

  • FAQ раздела лежит здесь!
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java ME (J2ME) | Следующая тема »


 




[ Время генерации скрипта: 0.0828 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.