Delphi的动画制作技巧
#1?牐犚弧⒗?
?牐犂皇郊创又屑渫奖呗允净妗T诖税裠bimage1的center属性设成true;把stretch属性设成false。把Width属性设成0,适当设置Left的值,使其显示在屏幕中间。实现动画主要方法是修改Left属性(值逐渐变小)和Width属性(值逐渐变大),要注意的是为了让幕布从中间均匀地向两边拉开,Width的改变值必须是Left改变值的2倍。在Dimeer1的OnTime事件中输入如下语句:
?牐爄f (dbimage1.left>0) then
?牐燽egin
?牐燿bimage1.left:=dbimage1.left-1;
?牐燿bimage1.width:=dbimage1.width+2;
?牐?//dbimage1.width的改变值必须是dbimage1.left改变值的2倍
?牐爀nd
?牐爀lse
?牐爐imer1.enabled:=false;//拉幕结束。
?牐牥焉厦娉绦蛑械腖eft改为Top,Width改为Height就可以实现竖直方向的拉幕。如果把拉幕这种效果运用于文本类型的对象就可以实现一行一行地显示文本的效果。
#1?牐牰⑹址缜?
?牐犜诶皇降亩校被嬲鱿允竞螅侔鸦娲恿奖咄屑渎谧。绱瞬欢涎罚窭址缜僖谎J迪质保杓尤胍桓霰淞縎tate,用以表明此时的状态。具体程序如下:
?牐爌rocedure TForm1.Timer1Timer(Sender:TObject);??
?牐燽egin
?牐爄f state=1 then
?牐爄f (dbimage1.left>0) then
?牐燽egin
?牐燿bimage1.left:=dbimage1.left-1??
?牐燿bimage1.width:=dbimage1.width+2??
?牐爀nd
?牐爀lse
?牐?//当幕完全拉开后,改变状态变量
?牐爏tate:=2
?牐爀lse //从两边往中间拉
?牐爄f dbimage1.left<form1.width div 2 then
?牐燽egin
?牐燿bimage1.left:=dbimage1.left+1;
?牐燿bimage1.width:=dbimage1.width-2;
?牐爀nd
?牐爀lse
?牐?//当幕合上后,改变状态变量
?牐爏tate:=1;
?牐爀nd;
#1?牐犎⒄だ甘?
?牐牷娉跏急皇闭だ刚谧。缓蟾魈跽だ钢鸾ケ湔徽だ阜指畹幕嬷鸾ネ暾鹄础T谡庵侄校だ傅慕巧蒘TATICTEXT类型的对象来充当(画面呈现几条栅栏就需要几个STATICTEXT对象)。只需改变STATICTEXT类型对象的Left和Width属性即可(Left逐渐变大,Width逐渐变小),在Timer1的OnClick事件上,每一个STATICTEXT对象作如下处理:
?牐爄f st1.width>0 then //ST1是STACTICTEXT类型的一个对象
?牐燽egin
?牐爏t1.width:=st1.width-2;
?牐爏t1.left:=st1.left+1;
?牐爀nd
?牐爀lse
?牐?//再一次循环
?牐燽egin
?牐爏t1.width:=40; //Width和Left由实际情况决定
?牐爏t1.left:=40;
?牐爀nd;
?牐犎绻焉厦娴恼だ杆脚帕校袻eft改成Top,把Width改成Height,则成为百页窗的效果,大家有兴趣的话可以试试。
#1?牐犓摹⒎?
?牐犝馐且恢中男Ч导噬鲜前裈op的值固定,改变Height的值,并把Stretch的值设为True。在Timer1的OnTime事件中键入以下程序可以实现向上翻页:
?牐爄f dbimage1.height>0 then
?牐燿bimage1.height:=dbimage1.height-4??
?牐犎舭焉厦娉绦蛑械腍eight的属性值从小变到大,则实现向下翻页的效果。若把Top改成Left,把Height改成Width,则实现左右翻页的效果。如果把Left和Width一起同时改变,则可以使图片以某一条通过图片的竖直线为轴进行旋转,在Timer1的OnTimeR事件中,程序如下:
?牐爌rocedure TForm1.Timer1Timer(Sender:TObject);
?牐燽egin
?牐爄f state=1
?牐爐hen
?牐爄f dbimage1.width>0 then
?牐燽egin
?牐?//画面逐渐变小
?牐燿bimage1.left:=dbimage1.left+1;??
?牐燿bimage1.width:=dbimage1.width-2;??
?牐?//width的改变值必须是left改变值的两倍
?牐爀nd
?牐爀lse
?牐爏tate:=2
?牐爀lse
?牐爄f dbimage1.width<250 then
?牐燽egin
?牐燿bimage1.left:=dbimage1.left-1;??
?牐燿bimage1.width:=dbimage1.width+2;??
?牐爀nd
?牐爀lse
?牐爏tate:=1
?牐爀nd;
?牐牬右陨铣绦蚩梢钥闯觯馐前鸦姹湫『笤俾浯螅湫∈且桓鲎刺⊿tate=1),变窄是另一个状态(State=2),这两种状态交替出现,即可出现动画。
#1?牐犖濉⒋踊嫱庵鸾ヒ疲ǚ桑┕?
?牐犜谏杓品饷娴氖焙颍P枰帽晏獯踊嫔戏晒男Ч? 要实现这种类型的动画实际上只需改变标题的Top(垂直方向飞过)或Left属性(水平方向飞过)。
?牐犂缡迪忠桓霰晏庠谝环洗幼笸曳晒O仍贔orm1里建立一个图形对象Dbimage1和文字对象Statictext1(注意TEXT类型的对象无法显示在图片上),把位置和大小尺寸设好,然后在Form1里建立一个Time对象Time1,把其Enabled属性设为TrueInterval属性设为10;并在事件OnTime里键入如下语句:
?牐爌rocedure TForm1.Timer1Timer(Sender:TObject);begin
?牐爄f statictext1.left<dbimage1.width+dbimage1.left then
?牐爏tatictext1..left:=statictext1.left+3
?牐爀lse
?牐爏tatictext1.left:=dbimage1.left;
?牐?//当标题飞出图片后,使标题重新位于图片的左边,再一次从左向右入屏幕
?牐爀nd;
?牐犓得鳎?
?牐?1.如果只想使标题从左向右移动一次,Else语句改为Timer1.enabled:=false;??
?牐?2. 数值3是标题移动的速度值,可以随意更改;??
?牐?3. 若标题只移到图片的某一位置,则把“statictext1.left<dbimage1.width+dbimage1.left”改为“statictext1.left<位置值”,并把Else语句改为Timer1.enabled:=false;
?牐?4. 只需把Left的值从大变到小,则实现从右往左飞过;
?牐?5. 把上面的Left改为Top,把Width改为Height,即可实现垂直方向的动画。