Кто знает, как создать подпрграмму по созданию задержки(скажем в 1 секунду). Так, например, в игре она необходима для того, чтобы объект с определённой скорстью совершал движение. Cпасибо за внимание.
klem4
31.01.2007 17:52
Delay(ms: Word);
1234
31.01.2007 19:12
Да, но в моей программе данная проедура не вкатывает:нужно конкретно задержка в 1 секунду. Не всё так просто
klem4
31.01.2007 19:17
Цитата
проедура не вкатывает
Ну если не вкатывает то это совсем другое дело, {$TELEPATHY ON} ...
1234
31.01.2007 19:23
Необходимо использовать процедуру GetTime. Кстати, какую посоветуете подобрать менюшку(самую простую).
volvo
31.01.2007 19:34
Зачем ты для организации паузы хочешь использовать процедуру, возвращающую системное время - непонятно... Я не говорю, что это невозможно, в принципе, можно и извратиться, например, так:
curr_time := GetTime; while GetTime - curr_time < 100 do; { время - в сотых долях секунды }
Кто знает, как создать подпрграмму по созданию задержки(скажем в 1 секунду). Так, например, в игре она необходима для того, чтобы объект с определённой скорстью совершал движение. Cпасибо за внимание.
Итак: НИКАКОГО GetTime! Никаких лишних модулей! Делаем быстро, ёмко и эффективно. В разделе переменных пишем:
var Time: longint absolute $0040: $006C; T: longint;
Итак, мы завели 2 переменные: Time - это количество 55милисекундных интервалов, прошедших с полуночи (точнее: один такой интервал по времени - это $10000/$1234DC секунд). Значение переменной Time присваивается автоматически железом, потому что она расположена точно по адресу системного времени. А мы можем спокойно её считывать. Можно, конечно, не заводить вообще этой переменной, и вместо Time писать каждый раз MemL[$0040: $006C], но так по-моему лучше. Далее, переменная T - вспомогательная. Если надо, чтобы программа поворяла один и тот же цикл, делая в каждом цикле задержку 55 млс, то в каждом цикле пишем:
repeat ... while T = Time do; {упаси бог забыть это двоеточие: иначе программа зависнет} T := Time; until ...
причём это T должно использоваться ТОЛЬКО в этом участке кода: иначе программа полетит с неимоверной скоростью. А задержка в одну секунду (приблизительно) делается так:
for i := 0 to 18 do begin {18.2 - число 55млсекундных интервалов в секунде} while T = Time do; T := Time; end;
Это будет задержка не совсем точно в 1сек, но бОльшей точности на Павкале не достичь. Также с помощью Time можно мерять время.
klem4
31.01.2007 21:35
Хотелось бы услышать от автора, по какой причине нельзя использовать Delay(1000) ?
volvo
31.01.2007 21:53
TarasBer,
Цитата
Итак: НИКАКОГО GetTime! Никаких лишних модулей!
А давай, ТЫ не будешь решать за автора, что ему ДА использовать, а что - НЕТ, договорились? А то слишком самоуверенно получается, вроде как ДО тебя об этом не знали, а ты пришел, и всех научил... Да, кстати, в том, что ты привел, есть одно маленькое НО, которое моментально превращается в ОГРОМНОЕ - ты не знаешь, какой компилятор используется... Попробуй написать программу, работающую по ТВОЕМУ алгоритму, и скомпилировать ее в FPC, например... Получится?
А раздел, я бы хотел напомнить, НЕ чисто Паскалевский, так что решение должно быть по крайней мере переносимо, а не рассчитано ТОЛЬКО на Турбо Паскаль...
TarasBer
1.02.2007 0:08
Цитата(klem4 @ 31.01.2007 21:35)
Хотелось бы услышать от автора, по какой причине нельзя использовать Delay(1000) ?
Причина в том, что задержка очень сильно зависит от компьютера. У меня, например, этот делэй даёт отнюдь не секунду, а намного меньше.
Цитата
А давай, ТЫ не будешь решать за автора, что ему ДА использовать, а что - НЕТ, договорились? А то слишком самоуверенно получается, вроде как ДО тебя об этом не знали, а ты пришел, и всех научил... Да, кстати, в том, что ты привел, есть одно маленькое НО, которое моментально превращается в ОГРОМНОЕ - ты не знаешь, какой компилятор используется... Попробуй написать программу, работающую по ТВОЕМУ алгоритму, и скомпилировать ее в FPC, например... Получится?
А раздел, я бы хотел напомнить, НЕ чисто Паскалевский, так что решение должно быть по крайней мере переносимо, а не рассчитано ТОЛЬКО на Турбо Паскаль...
Я на ТЫ не обращался ни к кому... Хамите, молодой человек... Да, такой метод пригоден только для досовского паскаля. Если у автора темы именно турбо паскаль, то я всё правильно сказал. Если нет - то извините.
klem4
1.02.2007 12:00
Цитата
Я на ТЫ не обращался ни к кому
Боюсь тебя огорчить, но это интернет, а не деловая встреча ...
Цитата
Причина в том, что задержка очень сильно зависит от компьютера. У меня, например, этот делэй даёт отнюдь не секунду, а намного меньше.
Ну так можно сделать параметр Delay переменной (в разных местах с разными коэффициентами) и позволить пользователю изменять значение этой переменной дабы настроить программу ...
TarasBer
1.02.2007 13:32
Цитата(klem4 @ 1.02.2007 12:00)
Боюсь тебя огорчить, но это интернет, а не деловая встреча ... Ну так можно сделать параметр Delay переменной (в разных местах с разными коэффициентами) и позволить пользователю изменять значение этой переменной дабы настроить программу ...
В таком случае предлагаю такой вариант:
for i := 0 to ms - 1 do {для большего эффекта можно вместо 10 написать r, где r - типа real} D := sin(cos(arctan(10))); {или включить эмуляцию сопроцессора}
Естественно, выключив оптимизацию. Даже без цээртэ обошлись. Параметр ms пусть каждый сам подбирает...
Всё-таки Delay это несерьёзно. Надо смотреть на время. В Паскале для это есть обращение к конкретному адресу, а в дельфе есть функция Time возвращающая значение типа double, причём единица - это 1 год. И меняется это значение чуть ли не каждую тысячную долю секунды (винда такты считает что ли?)
Altair
1.02.2007 17:44
Цитата
И меняется это значение чуть ли не каждую тысячную долю секунды (винда такты считает что ли?)
Системный таймер наверно...
1234
1.02.2007 18:53
Хорошо. Здесь вроде бы понятно. Спасибо за советы. А что насчёт менюшки.
TarasBer
1.02.2007 20:30
Цитата(1234 @ 1.02.2007 18:53)
Хорошо. Здесь вроде бы понятно. Спасибо за советы. А что насчёт менюшки.
На такой вопрос могу ответить только вопросом. Что вы называете менюшкой? Если полноценный интерфейс, то: в чём вы пишете? Если в дельфе, то там менюшку без проблем сделать. Паскаль - если программа будет в текстовом режиме - то турбо вижн есть (сам с ним никогда не работал, если честно). А для графического режима... Я, когда мне понадобилось, сам руками всё писал. Довольно увлекательно, между прочим.
А если примитивную менюшку, то не знаю... Ну по центру просто выводишь несколько строчек, и одна из них обведена прямоугольником. А стрелочки прямоугольник двигают. И ентер выбирает то, что нужно. Могу кусок кода написать, если попросите.
Можешь не писать... Одолжение что-ли делаешь? Спасибо, обойдемся...
1234
2.02.2007 16:05
Из любезно предоставленного списка(спасибо volvo) меня более других заинтересовало меню во фрейме(из одноимённого раздела) по кодовым словом asd. Остаётся вопрос: как можно выбирать стрелками "вверх" и "вниз" нужный раздел(прчём, чтобы он высвечивался).
volvo
2.02.2007 17:02
Цитата
как можно выбирать стрелками "вверх" и "вниз" нужный раздел (прчём, чтобы он высвечивался)
Если ты внимательно читал информацию по приведенным ссылкам, то там (везде, кстати) есть как раз то, что нужно - как ждать нажатия клавиши, как выбирать цвет активной/неактивной строки, и все остальное... Отрисовал то, что тебе очень уж понравилось, и после вызова Bar3D начинай цикл обработки клавиатуры (вместо трех OutTextXY)...
Меню - это такое неблагодарное дело, которое никто от начала и до конца ЗА ТЕБЯ делать не будет, ибо то, что нравится тебе не вызывает у меня ничего, кроме стремления поберечь глаза и закрыть быстро эту программу... Так что... Набросок у тебя есть (и не один, а целых 4) - дорабатывай...
Будут КОНКРЕТНЫЕ вопросы - приходи... А то ты уже и так отклонился от темы топика (не забыл, для чего она создавалась?) - не про меню она была, не надо делать из темы бардак...
Тём@
11.02.2007 1:48
Не знаю нужно ли это ещё. Когда-то написал для задержки на определённое время. Не идеально конечно... Попробуйте
Правила Форума (пункт 10) - архив не содержащий исходников удален...
volvo
11.02.2007 1:55
То есть, читать Правила ты не изволишь? Я про пункт №10 - не выкладываются программы без исходников. Это непонятно? Не хочешь показывать - сиди и любуйся на свои исходники... А в TPU я тебе и функцию форматирования диска засуну под видом процедуры сортировки
Файл удален...
st1x
23.03.2012 19:07
задержу можно ещё выполнять командой sleep(2000) ну место 2000 можно хоть сколько ставить ну 2000 это вроде милисекунд а не секунд 2000
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.