Движение круга в GraphWPF [closed]

Почему круг оставляет след при движении?

uses GraphWPF;

var
  xy: integer;

begin
  while true do
  begin
    Pen.Color := Colors.White;
    DrawCircle(xy, xy, 20);
    Inc(xy);
    Pen.Color := Colors.Black;
    DrawCircle(xy, xy, 20);
    Sleep(100);
  end;
end.

Потому что вы не стираете предыдущий, перед тем как рисовать следующий.

(Мдэ, накосячил так накосячил.) Кстати говоря, а блокировка перерисовки есть в GraphWPF?

А чем вообще GraphWPF отличается от GraphABC?

А что делать если след все-равно остается?

ABC это GDI который кривой и не даёт больше 20 фпс даже на супер-компьютерах
WPF это WPF, оно и с 3D графикой, и с графическим ускорением справляется

Тогда понятно :wink:

А, я понял… Это наверное из за сглаживания… Но если вам надо делать анимацию - лучше так:

uses GraphWPF;

var xy := 30.0;

procedure Redraw;
begin
  xy += 0.7;
  Pen.Color := Colors.Black;
  DrawCircle(xy, xy, 20);
end;

begin
  
  BeginFrameBasedAnimation(Redraw,60);
  
end.

Так же можно сделать у Redraw 1 параметр типа integer - в него будет передаваться номер кадра который сейчас рисуется.

В GraphABC подобное было из-за сглаживания.

Ну да, оно рисует некоторые пиксели круга (те что не полностью закрашены) немного прозрачными. И получается когда оно прозрачными белыми пикселями закрашивает прозрачные чёрные - цвет остаётся светло серым в итоге.

Делайте Window.Clear и перерисовывайте экран полностью

А блокировать рисование как то можно? А то ведь мигать будет…

Будет, но несильно.

Лучше сделать анимацию на основе кадра:

uses GraphWPF;

var x := 50;

procedure Draw;
begin
  Circle(x,150,30,Colors.Green);
  x += 1;
end;

begin
  BeginFrameBasedAnimation(Draw);
end.
1 лайк

А можно на совсем этого избежать?

Ну, я привел код. Там вообще мерцать не будет. Обновление - 60 кадров в секунду. С частотой монитора.

Ну, кстати, это не максимум. У меня вот монитор обновляется 62.5 раз в секунду. И если передавать ему информацию только 60 раз - выглядит немного хуже чем те же 65.

Передайте 120. Там доппараметр есть

А там, случаем, не видеокарта используется для расчётов?

Ну, для графики, вроде, таки использует, или пытается. Но только если внутренности WPF, в модуле написанном на паскале ничего про GPU я не видел.

Интересно всё таки GPU к Паскалю подключить. Может, не так страшен чёрт, как его малюют?