用两幅位图实现动画,怎么做?(急)(100分)

  • 主题发起人 主题发起人 付宾
  • 开始时间 开始时间

付宾

Unregistered / Unconfirmed
GUEST, unregistred user!
要作成一个VCL控件,要求不能有闪烁感(或尽量),两幅位图从文件中读入
(就是说,控件放到窗体上时类似TIMAGE),然后在object inspector
中将其读入,可以分开读,也可以用一个propertyEditor读入(越简单
越好)
那位大侠详细解释一番?不要别人的控件,除非是大侠你编的,呵呵!
 
>不要别人的控件,除非是大侠你编的
?????
why?????
so much such stuff with source! why don't u see them?
 
我不知道你是不会"用两幅位图实现动画",还是不会"做控件".
其实你要的功能标准控件Animate就可实现.(在Win32中)
 
我也说两句,大虾们莫笑!
不用第三方的控件:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs,ExtCtrls, StdCtrls, ComCtrls;

type
TForm1 = class(TForm)
Image1: TImage;
Timer1: TTimer;
Button1: TButton; {控制动画的播放和停止}
ScrollBar1: TScrollBar;
SpeedLable: TLabel; {控制播放的速度}
Fast: TLabel;
Slow: TLabel;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure ScrollBar1Change(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
Bmp1,Bmp2:TBitmap;
FS,Key:Boolean;
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
Bmp1:=TBitmap.Create;
Bmp2:=TBitmap.Create;
Bmp1.LoadFromFile('drawing1.bmp');
Bmp2.LoadFromFile('drawing2.bmp');
Key:=False;
if Key=True then
begin
Timer1.Enabled:=True;
Form1.Button1.Caption:='ON';
end
else
begin
Timer1.Enabled:=False;
ScrollBar1.Visible:=False;
Fast.Visible:=False;
SpeedLable.Visible:=False;
Slow.Visible:=False;
Form1.Button1.Caption:='OFF';
end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
if FS=True then Image1.Picture.Graphic:=Bmp1
else Image1.Picture.Graphic:=Bmp2;
FS:=Not FS;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Key:=Not Key;
if Key=True then
begin
Timer1.Enabled:=True;
ScrollBar1.Visible:=True;
Fast.Visible:=True;
SpeedLable.Visible:=True;
Slow.Visible:=True;
Form1.Button1.Caption:='ON';
end
else
begin
Timer1.Enabled:=False;
ScrollBar1.Visible:=False;
Fast.Visible:=False;
SpeedLable.Visible:=False;
Slow.Visible:=False;
Form1.Button1.Caption:='OFF';
end;
end;

procedure TForm1.ScrollBar1Change(Sender: TObject);
begin
Timer1.Interval:=ScrollBar1.position*5+1;
SpeedLable.Caption:=IntToStr(100-ScrollBar1.Position);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
bmp1.FreeImage;
bmp2.FreeImage;
end;

end.

特别的是,TImage控件的大小不能比你的图片大,否则会闪烁(图片较大时闪的
更利害)。
 
我只会笨方法:
用一个Ttimer控件和一个TImage来控制.
至于详细内容,见上面这位仁兄的
 
同意pxlei的观点。
似乎这样就行拉!
呵呵。
 
呵呵, 两副位图吗, 做两个timage, 然后重叠, 再用timer来分别visible:=not visible
就可以了, 保证没有闪烁:-)
 
两个image, 没有闪烁的条件是transparent都=false, 否则闪得更厉害.
 
create a gifanimator?
 
为了防止闪烁,最好采用两个Timage,一个Timer,而后直接利用Form的
Canvas.Draw 方法进行直接写屏.  
 
i agree with the answer of pan_hai.
 
一定要设定好视觉暂留的问题,不能切换得太快了,否则会出现很明显的闪烁
每一桢都要保留一段时间就可以了,切换速度并不是很大的障碍。
 
只有100分,给SnowWolf 大侠吧
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部