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

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

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

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


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

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

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


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

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


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

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


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


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


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

После странствий и скитаний настают другие времена.
Старая волна уходит и приходит новая волна.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
andriano
сообщение 5.01.2008 23:57
Сообщение #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 - 6.01.2008 0:03
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Чужак
сообщение 6.01.2008 0:29
Сообщение #3


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

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

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


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


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


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

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


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

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

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


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


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


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


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

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


Гость






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


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

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

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


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

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

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


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


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

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


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

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

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


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

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

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

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


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


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

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


Гость






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

Ну, и посмотреть доки неплохо было бы: Str + F1 получаешь готовую реализацию IntToStr. С вещественными - аналогично...
 К началу страницы 
+ Ответить 
Чужак
сообщение 15.01.2008 21:16
Сообщение #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?

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


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


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

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


Гость






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

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


Гость






еще 1 способ

var

key : char

begin

if keypressed = true then

begin

key := readkey ;

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

end;

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


Гуру
*****

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

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


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

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

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

 



- Текстовая версия 29.04.2024 6:54
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"