Не понимаю, как сделать нормальную картинку без смазов при движении.
Ниже простейший код. На форму положен TCircle. Далее по таймеру он двигается. Картинка нечеткая - Circle идет не просто рывками, а двоится и троится.
Пробовал сначала рисовать в буферный Bitmap, потом его разом аккуратно (с Canvas.BeginScene() и Canvas.EndScene() по событию OnPaint) рисовал на TRectangle, но картинка та же.
Как правильно под FMX рисовать?
unit Unit1;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Objects;
type
TForm1 = class(TForm)
Circle1: TCircle;
Timer1: TTimer;
procedure Timer1Timer(Sender: TObject);
procedure FormActivate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.fmx}
procedure TForm1.FormActivate(Sender: TObject);
begin
Circle1.Position.X:=0;
Circle1.Position.Y:=0;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Circle1.Position.X:=Circle1.Position.X+5;
Circle1.Position.Y:=Circle1.Position.Y+5;
Invalidate();
end;
end.
Вопрос
nassl
Не понимаю, как сделать нормальную картинку без смазов при движении.
Ниже простейший код. На форму положен TCircle. Далее по таймеру он двигается. Картинка нечеткая - Circle идет не просто рывками, а двоится и троится.
Пробовал сначала рисовать в буферный Bitmap, потом его разом аккуратно (с Canvas.BeginScene() и Canvas.EndScene() по событию OnPaint) рисовал на TRectangle, но картинка та же.
Как правильно под FMX рисовать?
unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Objects; type TForm1 = class(TForm) Circle1: TCircle; Timer1: TTimer; procedure Timer1Timer(Sender: TObject); procedure FormActivate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.fmx} procedure TForm1.FormActivate(Sender: TObject); begin Circle1.Position.X:=0; Circle1.Position.Y:=0; end; procedure TForm1.Timer1Timer(Sender: TObject); begin Circle1.Position.X:=Circle1.Position.X+5; Circle1.Position.Y:=Circle1.Position.Y+5; Invalidate(); end; end.
Такой код не улучшает
unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Objects; type TForm1 = class(TForm) Circle1: TCircle; Timer1: TTimer; procedure Timer1Timer(Sender: TObject); procedure FormActivate(Sender: TObject); procedure FormPaint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.fmx} procedure TForm1.FormActivate(Sender: TObject); begin Circle1.Position.X:=0; Circle1.Position.Y:=0; end; procedure TForm1.FormPaint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF); begin Canvas.BeginScene; Circle1.Position.X:=Circle1.Position.X+5; Circle1.Position.Y:=Circle1.Position.Y+5; Canvas.EndScene; end; procedure TForm1.Timer1Timer(Sender: TObject); begin Invalidate(); end; end.
Ссылка на комментарий
16 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.