Delphi知识中心
www.delphi.ee
提供Delphi技术知识
与Delphi程序员共同进步


在线服务QQ:99923144 随时恭候您的光临
首页 基础知识 WIN系统 组件使用 组件开发 数据库 ACTIVEX 多媒体技术 网络技术 关于
文章类别:多媒体技术    你尚未登陆,会员功能无法使用,请从 网站首页 登陆。
  Delphi的动画制作技巧  
 
Delphi的动画制作技巧

Delphi中所有对象都提供了Top、Left、Height、Width四个属性,用以控制对象的位置和大小;另外在Delphi中还提供了一个Time的构件,利用它们可以方便地实现一些动画。

  一、拉幕

  拉幕式即从中间往两边慢慢显示画面。在此把dbimage1的center属性设成true;把stretch属性设成false。把Width属性设成0,适当设置Left的值,使其显示在屏幕中间。实现动画主要方法是修改Left属性(值逐渐变小)和Width属性(值逐渐变大),要注意的是为了让幕布从中间均匀地向两边拉开,Width的改变值必须是Left改变值的2倍。在Dimeer1的OnTime事件中输入如下语句:

  if (dbimage1.left>0) then

  begin

  dbimage1.left:=dbimage1.left-1;

  dbimage1.width:=dbimage1.width+2;

  //dbimage1.width的改变值必须是dbimage1.left改变值的2倍

  end

  else

  timer1.enabled:=false;//拉幕结束。

  把上面程序中的Left改为Top,Width改为Height就可以实现竖直方向的拉幕。如果把拉幕这种效果运用于文本类型的对象就可以实现一行一行地显示文本的效果。

  二、手风琴

  在拉幕式的动画中,当画面整个显示后,再把画面从两边往中间慢慢遮住,如此不断循环,像拉手风琴一样。实现时,需加入一个变量State,用以表明此时的状态。具体程序如下:

  procedure TForm1.Timer1Timer(Sender:TObject);

  begin

  if state=1 then

  if (dbimage1.left>0) then

  begin

  dbimage1.left:=dbimage1.left-1

  dbimage1.width:=dbimage1.width+2

  end

  else

  //当幕完全拉开后,改变状态变量

  state:=2

  else //从两边往中间拉

  if dbimage1.left  begin

  dbimage1.left:=dbimage1.left+1;

  dbimage1.width:=dbimage1.width-2;

  end

  else

  //当幕合上后,改变状态变量

  state:=1;

  end;

  三、栅栏式

  画面初始被竖直栅栏遮住,然后各条栅栏逐渐变窄,被栅栏分割的画面逐渐完整起来。在这种动画中,栅栏的角色由STATICTEXT类型的对象来充当(画面呈现几条栅栏就需要几个STATICTEXT对象)。只需改变STATICTEXT类型对象的Left和Width属性即可(Left逐渐变大,Width逐渐变小),在Timer1的OnClick事件上,每一个STATICTEXT对象作如下处理:

  if st1.width>0 then //ST1是STACTICTEXT类型的一个对象

  begin

  st1.width:=st1.width-2;

  st1.left:=st1.left+1;

  end

  else

  //再一次循环

  begin

  st1.width:=40; //Width和Left由实际情况决定

  st1.left:=40;

  end;

  如果把上面的栅栏水平排列,把Left改成Top,把Width改成Height,则成为百页窗的效果,大家有兴趣的话可以试试。

  四、翻页

  这是一种旋转的效果,实际上是把Top的值固定,改变Height的值,并把Stretch的值设为True。在Timer1的OnTime事件中键入以下程序可以实现向上翻页:

  if dbimage1.height>0 then

  dbimage1.height:=dbimage1.height-4

  若把上面程序中的Height的属性值从小变到大,则实现向下翻页的效果。若把Top改成Left,把Height改成Width,则实现左右翻页的效果。如果把Left和Width一起同时改变,则可以使图片以某一条通过图片的竖直线为轴进行旋转,在Timer1的OnTimeR事件中,程序如下:

  procedure TForm1.Timer1Timer(Sender:TObject);

  begin

  if state=1

  then

  if dbimage1.width>0 then

  begin

  //画面逐渐变小

  dbimage1.left:=dbimage1.left+1;

  dbimage1.width:=dbimage1.width-2;

  //width的改变值必须是left改变值的两倍

  end

  else

  state:=2

  else

  if dbimage1.width<250 then

  begin

  dbimage1.left:=dbimage1.left-1;

  dbimage1.width:=dbimage1.width+2;

  end

  else

  state:=1

  end;

  从以上程序可以看出,这是把画面变小后再慢慢变大,变小是一个状态(State=1),变窄是另一个状态(State=2),这两种状态交替出现,即可出现动画。

  五、从画面外逐渐移(飞)过

  在设计封面的时候,经常需要让标题从画面上飞过的效果。 要实现这种类型的动画实际上只需改变标题的Top(垂直方向飞过)或Left属性(水平方向飞过)。

  例如实现一个标题在一幅画上从左往右飞过。先在Form1里建立一个图形对象Dbimage1和文字对象Statictext1(注意TEXT类型的对象无法显示在图片上),把位置和大小尺寸设好,然后在Form1里建立一个Time对象Time1,把其Enabled属性设为TrueInterval属性设为10;并在事件OnTime里键入如下语句:

  procedure TForm1.Timer1Timer(Sender:TObject);begin

  if statictext1.left  statictext1..left:=statictext1.left+3

  else

  statictext1.left:=dbimage1.left;

  //当标题飞出图片后,使标题重新位于图片的左边,再一次从左向右入屏幕

  end;

  说明:

  1.如果只想使标题从左向右移动一次,Else语句改为Timer1.enabled:=false;

  2. 数值3是标题移动的速度值,可以随意更改;

  3. 若标题只移到图片的某一位置,则把“statictext1.left  4. 只需把Left的值从大变到小,则实现从右往左飞过;

  5. 把上面的Left改为Top,把Width改为Height,即可实现垂直方向的动画。

 

在线服务QQ:99923144 Delphi程序员QQ群(139442)
Delphi知识中心 www.delphi.ee 最专业的Delphi技术资料网站