![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
такой вопрос
dlp © (2002-05-13 21:33:00)Как правильно пользоваться процедурой sleep?
примерный код:
procedure...
label start;
begin
start;
{пытался всунуть сюда, но время замедлялось ТОЛЬКО 1 раз, то есть при повторном возвращении к этому месту время не замедлялось}
...
...
...
goto change;
end;
Anonymous (2002-05-15 23:51:00) [1]Александр_30, стиль изложения журнала "хакер". Меня такое бесит...
dlp (2002-05-15 23:21:00) [2]2eSKey-Дему можешь скачать здесь
www.dlproach.chat.ru/invasion.zip
eSKey (2002-05-15 16:11:00) [3]Очень интересно, где я смогу лицезреть/поиграть в такую эпическую гаму уважаемого автора... Уверен, что день, когда он узнает о Application.ProcessMessages и возможностях Timer станет последним днем китов игровой индустрии :)
Tonie (2002-05-15 16:11:00) [4]Help -> TAplication -> ProcessMessages
Call ProcessMessages to permit the application to process messages that are currently in the message queue. ProcessMessages cycles the Windows message loop until it is empty, and then returns control to the application.
А про вездесущего Sender-а - это действительно весело :-)
dlp (2002-05-15 15:52:00) [5]УРААА!!!
2MBo : большое программерское спасибо...
кстати, может обьясните что Application.ProcessMessages; значит?
MBo (2002-05-15 12:15:00) [6]перед великим и могучим goto поставь
Application.ProcessMessages;
dlp (2002-05-15 11:43:00) [7]чиатал, всё перечитал, ничего...
JC (2002-05-15 01:01:00) [8]А не пробывал без label"ов делать просто вместо goto change;
пиши enemyturn, ну или используй Timer... вконце концов ВНИМАТЕЛЬНО перечитай текст программы!!!
dlp (2002-05-15 00:32:00) [9]procedure enemyturn;
label change;
begin
change;
sleep(100);
...
...
изменение координат врага
вывод графики врагов с изменёнными координатами
goto change;
end;
Cobalt (2002-05-14 20:41:00) [10]А где change? change-то где???!!!!
!Требуйте долива пены после отстоя пЫва!
dlp (2002-05-14 19:20:00) [11]проблема в следующем:
моя программа-игра:
procedure enemyturn;
label change;
begin
sleep(100);
...
...
изменение координат врага
вывод графики врагов с изменёнными координатами
goto change;
end;
так вот,враг(его изображение) перемещается(видимый экран)
не пошагово, а проходит какое-то время и оказывается сразу в конечной точке маршрута,то есть я так понимаю, что он не учитывает все последующие СЛИПЫ
Song (2002-05-14 10:04:00) [12]Я даже теряюсь как мне удобней написать: GoSleep(что-то тут) или Sleep(10) :)))
Александр_30 (2002-05-14 10:02:00) [13]Собственно говоря, тема не о роли Sender, а о Sleep.... Еще скажите, что примеры, мной приведенные не работают....
Anatoly Podgoretsky (2002-05-14 09:46:00) [14]Ты Дельфи то видел?
У тебя обычные процедуры, не члены класса.
Да и в private для процедур тоже не требуется Sender.
MBo (2002-05-14 09:45:00) [15]Крут неописуемо!
С интересом узнал о незаменимой роли Sender в Delphi.
Александр_30 (2002-05-14 09:36:00) [16]Дыкс, в Делфи без указания Sendera никуда не деться. Пишешь в private
Procedure GoSleep2 (Sender: Tobject); затем жмешь Ctrl+Shift+C Делфя генерит тебе процедурку. Потом пишешь в ней, что тебе надо.
Если же спользовать оную в паскале обыкновенном, то и нафиг там сендер не нужен.
cpp (2002-05-14 09:18:00) [17]А зачем ПРОФФИ в объявлении процедуры GoSleep, GoSleep2 указывают параметр Sender?
Александр_30 (2002-05-14 09:15:00) [18]Ну Александер, ты крут! :)
Александр_30 (2002-05-14 09:12:00) [19]Значица такс, беги за пЫвом... Сходил? Откупоривай и делай глоток. Готово? Ок, теперь за работу. Процедура Sleep приостанавливает работу программы на заданное количество миллисекунд. Формат процедуры такой - Sleep(N), где N - то самое количество мск, на которое надо остановиться. Все, хлебай пЫво. Теперь перейдем к примерам.
Самый простой - вызвать Sleep один раз.
Procedure GoSleep (Sender: Tobject);
begin
Sleep(10);
end;
Второй пример сложнее, и его ты поймешь только после банки пЫва!
Допивай и читай дальше!
Procedure GoSleep2 (Sender: Tobject);
Var
i: Integer;
begin
for i:=1 to 100 do
Sleep(10);
end;
И еще один вариант. Вызывать Sleep по таймеру. Бросаешь на формочку таймер, задаешь ему интервал срабатывания и в обработчике onTimer пишешь
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Sleep(20);
end;
Все, дохлебывай пЫво! Кстати, профи делают так:
const
N: Cardinal = 10; - количество миллисекунд;
или так
const
N: LongInt = 10;
потом в любой процедуре, описанной выше пишешь Sleep(N) и все.
Выхлебал все пЫво? Иди спать, щас еще один Sleep будет! хе...:)
DeMoN-777 (2002-05-14 09:04:00) [20]Например так,
Sleep(30);
Если в цикле, то дописывай в цикл
for i:=1 to 10 do
begin
Sleep(30);
Application.ProcessMessages;
end;