0 / 0 / 3
Регистрация: 14.07.2015
Сообщений: 104
1

Как избавиться от мерцания в графическом режиме на Free Pascal?

18.02.2017, 14:01. Показов 1939. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Пишу программу с графикой 1 раз, и столкнулся с такой проблемой, что при движении объектов они как бы мерцают.
Движение осущетсвяю так: отрисовываю новый элемент и закрашиваю старый. Да скорее всего проблема как раз в этом.
Вот пример программы:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
uses Graph;
      var  Gd,Gm: Integer;x:integer;
   BEGIn
      Gd:=Detect;Gm:=VGAHi; InitGraph (Gd,Gm,'..\bgi');
 
    If  GraphResult=grOk
         then begin
                 for X:=1 to 400 do begin
                 SetColor (white);
                  Circle(getMaxX div 2+x+10,GetMaxy div 2+x+10,250);
                  SetColor (black);
                  Circle(getMaxX div 2+x+10,GetMaxy div 2+x+10,250);
end;
end
  else Writeln('Graphics error: ');
                 Readln;
              CloseGraph;
 END.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.02.2017, 14:01
Ответы с готовыми решениями:

Как вывести картинки на экран В графическом режиме pascal abc
например если ваш знак овен ,вывести эту картину uses graphABC; const kol=1000; ...

Штриховка уголка в графическом режиме - Pascal
Всем доброго дня, необходима помощь. Не поможете ли кодом, нужно написать ПО на паскале, для...

Строка с бегущим текстом в графическом режиме (Pascal)
Здравствуйте, помогите, пожалуйста, решить следующую задачу (используя графический режим): ...

Создать в графическом режиме Pascal игру Сокровища
Случайным образом разбросать сокровища (например,окружность) на экране.Реализовать движение паучка...

6
Эксперт Pascal/Delphi
6810 / 4567 / 4819
Регистрация: 05.06.2014
Сообщений: 22,438
18.02.2017, 15:14 2
Прорисовка и жуткое мерцание

Можно попробовать поработать с видеостраницами. SetActivePage/SetVisualPage
Или как вариант, библиотека wingraph - http://math.ubbcluj.ro/~sberin... index.html
Пример:
Pascal
1
2
3
4
5
6
7
8
UpdateGraph(UpdateOff); //used to reduce flickering
  repeat
    Delay(15); // задержка
    PutAnim(80+Round(10*Sin(i*Pi12)),130+Round(10*Cos(i*Pi12)),anim,BkgPut); // выбили маску для спрайта
    Inc(i); // сменили координату
    PutAnim(80+Round(10*Sin(i*Pi12)),130+Round(10*Cos(i*Pi12)),anim,TransPut); // вывели спрайт
    UpdateGraph(UpdateNow);
  until KeyPressed;
Еще пример:
от Polinom2686

Pascal
1
2
3
4
UpdateGraph(UpdateOff);
Circle(0,0,50);          //Рисуем круг
Bar(0,0,100,100)         //Рисуем закрашенный прямоугольник
UpdateGraph(UpdateNow);  //Выводим на экран все примитивы
1
0 / 0 / 3
Регистрация: 14.07.2015
Сообщений: 104
18.02.2017, 17:39  [ТС] 3
Цитата Сообщение от ZX Spectrum-128 Посмотреть сообщение
Можно попробовать поработать с видеостраницами. SetActivePage/SetVisualPage
Вот пробую работать с видеостраницами. Но мерцания так и остались. Может я как то не так использую страницы?
Насколько я понял setActivePage(n) - делает активной страницу n,но не показывает ее. SetVisualPage(n) - наоборот только показывает страницу.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
uses Graph,crt;
      var  Gd,Gm: Integer;x,n:integer;
   BEGIn
      Gd:=Detect;Gm:=VGAHi; InitGraph (Gd,Gm,'..\bgi');
 
    If  GraphResult=grOk
         then begin
                  SetColor (white); clearDevice;
                 for X:=1 to 800 do begin
                 setActivePage(1);
                 Circle(getMaxX div 2+x+10,GetMaxy div 2+x+10,250);
                 SetVisualPage(1);
                 SetActivePage(0);  clearDevice;
                 Circle(getMaxX div 2+x+10,GetMaxy div 2+x+10,250);
                 SetvisualPage(0);
end;
end
  else Writeln('Graphics error: ');
 Readln;
CloseGraph;
 END.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32825 / 21163 / 8147
Регистрация: 22.10.2011
Сообщений: 36,418
Записей в блоге: 8
18.02.2017, 18:10 4
В режиме VGAHi только одна видеостраница, поэтому код не имеет смысла. Выбирайте другой режим, либо другой графический модуль.
0
0 / 0 / 3
Регистрация: 14.07.2015
Сообщений: 104
18.02.2017, 18:41  [ТС] 5
Цитата Сообщение от volvo Посмотреть сообщение
В режиме VGAHi только одна видеостраница, поэтому код не имеет смысла. Выбирайте другой режим, либо другой графический модуль.
Спасибо, заменил на VGamed. Уже лучше. Но все равно остается легкое мерцание.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32825 / 21163 / 8147
Регистрация: 22.10.2011
Сообщений: 36,418
Записей в блоге: 8
18.02.2017, 19:06 6
Смена страницы в графическом режиме Так что придется - таки менять модуль...
1
0 / 0 / 3
Регистрация: 14.07.2015
Сообщений: 104
18.02.2017, 20:21  [ТС] 7
Действительно, сменил на Винграф и никаких мерцаний. Спасибо всем за помощь.
Один только вопрос. Шарик у меня движется с бешенной скоростью, прописываю Delay, все нормализуется, вот только прога заверашться не хочет.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 Uses wingraph,wincrt;
Var Gd, Gm : smallint;
    x, y, i : Integer;
 
begin
  gd := d8bit; gm := m800x600;
  InitGraph(Gd, Gm, '');
  if GraphResult <> grOk Then Halt(1);
 
  repeat
     for X:=1 to 800 do begin
                 setActivePage(1);clearDevice; delay(30);
                  Circle(getMaxX div 2,GetMaxy div 2,250);
                 Circle(getMaxX div 2+x+10,GetMaxy div 2+x+10,25);
                 SetVisualPage(1);
                 SetActivePage(0);  clearDevice;
                  Circle(getMaxX div 2,GetMaxy div 2,250);
                 Circle(getMaxX div 2+x+10,GetMaxy div 2+x+10,25);
                 SetvisualPage(0);
end;
  until KeyPressed;
closegraph
end.
0
18.02.2017, 20:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.02.2017, 20:21
Помогаю со студенческими работами здесь

Нарисовать 2 функции в графическом режиме ABC Pascal.NET
Есть готовый код программы только для 1 функции, а нужно для 2 : sin(e^(-x)) и cos(e^(-x))...

Как избавиться от мерцания?
Здравствуйте, возникла такая проблема. При быстром прогоне таймера появляется мерцание, есть ли...

Как избавиться от мерцания ToolTip?
суть в чем: есть checkedListBox при наведении мыши на элемент появляется описание в ToolTip...

Как избавиться от мерцания в gdi?
Как избавиться от мерцания в gdi? Пробовал делать двойную буфферизацию с помощью...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru