IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Графика, отрисовка, клавиатура, Как совместить непрерывность отрисовки с управлением с клавиатуры?
сообщение
Сообщение #1


меркантильный
***

Группа: Пользователи
Сообщений: 161
Пол: Мужской

Репутация: -  6  +


Есть программа, делающа непрерывную отрисовку
с помощью repeat. Если используется структура

....
repeat
....
until Keypressed;


на экраине идет непрерывная отрисовка,
до нажатия любой клавиши.
Но если поменять на

....
repeat
....
until Readkey='q';


Программа выходит по нажатию
клавиши q, но работает только
при нежатии любой другой клавиши(нажал и не отпускаешь).
Как совместить непрерывность отрисовки с управлением с клавиатуры?


--------------------
Смысл откроется тебе. Красками играя
Жизнь предстанет как поток без конца и края.


В этом мире порой разбиваютсямечты
Но чтобы он стал другой Вдруг в него приходишь ТЫ...

После странствий и скитаний настают другие времена.
Старая волна уходит и приходит новая волна.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


readkey ждет нажатия клавиши, поэтому работа программы приостанавливается.
Проще всего организовать примерно так:

repeat
ch := #0; // забываем предшествующее состояние
if keypressed then begin
ch := readkey;
case ch of
... // обработка нужных клавиш - изменение состояния
end; //case
end;
DrawScreen; // отрисовка нового состояния с учетом нажатых клавиш и прошедшего времени
until (ch = 'q') or (ch = 'Q'); // заботимся, чтобы работа программы не зависела от состояния Caps Lock



Сообщение отредактировано: andriano -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


меркантильный
***

Группа: Пользователи
Сообщений: 161
Пол: Мужской

Репутация: -  6  +


Спасибо, работает.


--------------------
Смысл откроется тебе. Красками играя
Жизнь предстанет как поток без конца и края.


В этом мире порой разбиваютсямечты
Но чтобы он стал другой Вдруг в него приходишь ТЫ...

После странствий и скитаний настают другие времена.
Старая волна уходит и приходит новая волна.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


меркантильный
***

Группа: Пользователи
Сообщений: 161
Пол: Мужской

Репутация: -  6  +


Еще один вопрос.
Я сделал-переменные
меняются по нажатию клавиши,
изменяя параметры отрисовки в непрерывном режиме.
Но как вывести текущее значение переменной на экран в режиме Graph?/
Либо как вообще выводятся переменные на экран в этом режиме?


Сообщение отредактировано: Чужак -


--------------------
Смысл откроется тебе. Красками играя
Жизнь предстанет как поток без конца и края.


В этом мире порой разбиваютсямечты
Но чтобы он стал другой Вдруг в него приходишь ТЫ...

После странствий и скитаний настают другие времена.
Старая волна уходит и приходит новая волна.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Цитата
как вообще выводятся переменные на экран в этом режиме?
Переменные или их значения? Значения - переводятся в строку и печатаются (outtext/outtextxy)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


меркантильный
***

Группа: Пользователи
Сообщений: 161
Пол: Мужской

Репутация: -  6  +


Цитата(volvo @ 8.01.2008 23:59) *

Переменные или их значения? Значения - переводятся в строку и печатаются (outtext/outtextxy)

Их значения.
И все происходит при непрерывной
отрисовке на экране. При этом
значения переменных меняются с клавиатуры
(соответственно меняются параметры отрисовки).


--------------------
Смысл откроется тебе. Красками играя
Жизнь предстанет как поток без конца и края.


В этом мире порой разбиваютсямечты
Но чтобы он стал другой Вдруг в него приходишь ТЫ...

После странствий и скитаний настают другие времена.
Старая волна уходит и приходит новая волна.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


меркантильный
***

Группа: Пользователи
Сообщений: 161
Пол: Мужской

Репутация: -  6  +


to adriano-был по твоей ссылке.
Спрайтовая анимация-интересно, но ли это самый простой способ
вывести значения переменных на экран в режиме Graph?
Цитата(volvo @ 8.01.2008 23:59) *

Переменные или их значения? Значения - переводятся в строку и печатаются (outtext/outtextxy)

Как это сделать?
Как значение переменной типа Integer или Real перевести в строку и вывести
на экран в ходе цикла (оно ведь меняется при нажатии кнопки)?

Сообщение отредактировано: Чужак -


--------------------
Смысл откроется тебе. Красками играя
Жизнь предстанет как поток без конца и края.


В этом мире порой разбиваютсямечты
Но чтобы он стал другой Вдруг в него приходишь ТЫ...

После странствий и скитаний настают другие времена.
Старая волна уходит и приходит новая волна.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Цитата
Как значение переменной типа Integer или Real перевести в строку и вывести на экран в ходе цикла
Показать кусок кода, что именно у тебя там происходит, КАК собственно меняется значение и КОГДА ты хочешь его выводить (и перестать делать заключение, что вокруг тебя находятся одни телепаты)...

Ну, и посмотреть доки неплохо было бы: Str + F1 получаешь готовую реализацию IntToStr. С вещественными - аналогично...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


меркантильный
***

Группа: Пользователи
Сообщений: 161
Пол: Мужской

Репутация: -  6  +


Цитата(volvo @ 15.01.2008 9:11) *

Показать кусок кода, что именно у тебя там происходит, КАК собственно меняется значение и КОГДА ты хочешь его выводить (и перестать делать заключение, что вокруг тебя находятся одни телепаты)...

Сейчас покажу. В теме "Графика. Двужущаяся точка. Точка совершает колебания" я приводил программу

program VisualSinusoid;
Uses Crt, Graph;
Const r = 80;
Label 1;
Var gd, gm: Integer; t,X,Y: Real;
Begin
InitGraph(gd,gm,''); t:=0;
1: X:=280;
SetColor(15);
Circle(120,240,r);
SetColor(2);
Line(120, 240, Round(120+r*cos(t)), Round(240+r*sin(t)));
Line(Round(120+r*cos(t)), Round(240+r*sin(t)),
280, Round(240+r*sin(t)) );
X:=X+1; Y:=240+r*sin(t);
PutPixel(Round(X), Round(Y), 11);
Delay(300);
SetColor(0);
Line(120, 240, Round(120+r*cos(t)), Round(240+r*sin(t)));
Line(Round(120+r*cos(t)), Round(240+r*sin(t)),
280, Round(240+r*sin(t)));
t:=t+0.05;
if X>600 then begin ClearDevice; goto 1; end
until KeyPressed;
CloseGraph
End.
теперь её усложняю. Вместо

program VisualSinusoid;
Uses Crt, Graph;
Const r = 80;
Label 1;
Var gd, gm: Integer; t,X,Y: Real;
Begin
InitGraph(gd,gm,''); t:=0;

r становится переменной:

program VisualSinusoid;
Uses Crt, Graph;
Label 1;
Var gd, gm,r: Integer; t,X,Y: Real;
ch:char;
Begin
InitGraph(gd,gm,''); t:=0; r = 80;

и появляется процедура:

Procedure Upravlenie;
Begin {procedure}
ch:=#0;
if keypressed then begin
ch:=readkey;
case ch of
'i': r:=r+1;
'e': r:=r-1;
....
end; {case}
end; {if}
End;{procedure}

она вызывается из тела программы (из цикла).
Все работает, но как выводить на экран значение r?

Сообщение отредактировано: Чужак -


--------------------
Смысл откроется тебе. Красками играя
Жизнь предстанет как поток без конца и края.


В этом мире порой разбиваютсямечты
Но чтобы он стал другой Вдруг в него приходишь ТЫ...

После странствий и скитаний настают другие времена.
Старая волна уходит и приходит новая волна.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






Цитата
как выводить на экран значение r?
Очень просто: появляется функция
function IntToStr(i: Longint): String;
var s: string;
begin
Str(i, s);
IntToStr := s;
end;

в конце процедуры Upravlenie делается:
setfillstyle(solidfill, getbkcolor);
bar(...); { тут дашь координаты, чтобы затереть старое значение }
outtextxy(..., IntToStr®); { <--- выводишь в том же месте новое значение }
Вот и все...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






еще 1 способ

var

key : char

begin

if keypressed = true then

begin

key := readkey ;

case ord(key) of
.........

end;

end;
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Цитата(Гость @ 20.01.2008 20:49) *

еще 1 способ
...
И чем этот способ отличается от приведенного в посте №2?
Только наличием безграмотной конструкции keypressed = true? Почему тогда не ((keypressed = true) = true) = true?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 27.10.2020 11:28
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name