龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VB开发 >

制作带有动画和声音的屏幕保护程序

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
利用VB5.0和WINDOWS95自身所带的“画笔”就可以制作出带有动画和声音的屏幕保护程序。画面是一只蝴蝶在音乐的伴奏下飞动,碰动屏幕的边缘就会向小球反弹一样换个方向飞。这里需要两
利用VB5.0和WINDOWS95自身所带的“画笔”就可以制作出带有动画和声音的屏幕保护程序。画面是一只蝴蝶在音乐的伴奏下飞动,碰动屏幕的边缘就会向小球反弹一样换个方向飞。这里需要两个bmp文件,采用的是VB自带的文件(源文件的位置是c:programfilesdevstduiovbsamplespguidevcrfly1.bmp和bfly2.bmp)。因为蝴蝶要向各个方向飞,所以还要在这两个文件的基础上,再制作两个。打开WINDOWS附件中的“画笔”,打开bfly1.bmp,点取“画像”菜单中的“翻转/旋转”,选择“水平翻转”后,将生成的新文件另存存盘,起名“左飞”,同样的方法将bfly2.bmp另存为“左合”,将bfly1.bmp改名为“右飞”,bfly2.bmp改名为“右合”(左飞,左合是蝴蝶向左飞时的画面,右飞,右合是蝴蝶向右飞时的画面,最后在画笔中将4个图的底色都改为黑色,这是保证蝴蝶的底色和屏幕的背景相融合)。
  动画的制作是利用image控件来实现的。改变image的picture属性可实现画面的变化,利用move命令可实现画面的移动。利用MCI控件来实现音乐播放。程序编译后将生成的exe可执行文件,改为以*.scr结尾的文件名,将其复制到windowssystem子目录即可,然后就可以在“控制面板”的“显示器”中选择该屏幕保护程序即可使用(运行所带exe文件必须将mid复制到指定的位置。这里建议使用所带的setup进行自动安装,可以省去一切步骤,setup后的文件名为蝴蝶.scr,已自动安装到系统的文件夹,在“显示器”中的“屏幕保护程序”可以找到。重新编译程序所需的4个bmp文件和一个Mid文件也安装到指定的位置。详细路径请见源程序中的说明)。
  具体做法如下:首先建立一个新窗体form1,各属性分别是backcolor选为黑色,borderstyle选为0(黑
  色不带边框)。在form1上加入7个image控件,在格式菜单中将各个image的大小都选为相同,image1-7的stretch属性都选为true(图像将随控件的大小而变化),image1-6的visible的属性选为false(不可见),
  image7的visible属性为true。
  Image1.picture=右飞Image2.picture=右合
  Image3.picture=左飞Image4.picture=左合
  在“工程”菜单中选择“部件”,并从“部件”对话框的“控件”列表中选择“MicrosoftMultimediaControl5.0”加入MCI控件,并将其visible属性改为false。加入时钟控件timer1,其interval属性为200(interval的值与机器的配置有关,在其他机器上可作适当调整,我的配置是P133,内存为32M)。
  原理如下:image1-4用来存图形,运行时不可见。Image5用来存蝴蝶翅膀张开时的图像,Image6用来
  存蝴蝶翅膀合上时的图像,运行时都不可见。Image7是唯一运行时可见,利用时钟控件来改变其图形,用
  Image5和Image6来回变换。
  IfImage7.Picture=Image5.PictureThen
  Image7.Picture=Image6.Picture
  Else
  Image7.Picture=Image5.Picture
  EndIf
  蝴蝶的移动利用image7控件的move方法:
  image7.movexp,yp
  4个边界值
  上边:y=0
  下边:y=form1.scaleheight-image7.scaleheight
  左边:x=0
  右边:x=form1.scalewidth-image7.scalewidth
  xp,yp为水平和垂直的移动量。
  X,y为image7在窗体中的位置
  左右边界的判断:
  Ifx>=form1.ScaleWidth-Image1.WidthThen'右边界
  Image5.Picture=Image3.Picture
  '蝴蝶应向左飞,翅膀张开的图形应选为左飞
  Image6.Picture=Image4.Picture
  '翅膀合上的图形应选为左合
  x=Form1.ScaleHeight-Image1.Width
  '改变x的位置
  xp=(-1)*xp
  '改变水平的移动量符号,以便向相反方向飞。
  EndIf
  Ifx<=0Then'左边界
  Image5.Picture=Image1.Picture'右飞
  Image6.Picture=Image2.Picture'右合
  x=0
  xp=(-1)*xp
  EndIf
  Ify>=Form1.ScaleHeight-Image1.HeightThen
  '下边界
  y=Form1.ScaleHeight-Image1.Height
  '改变y的位置
  yp=(-l)*yp
  '改变垂直的移动量符号,以便向相反方向飞
  EndIf
  Ify<=0Then'上边界
  y=0
  yp=(-1)*yp
  EndIf
  声音的播出:这里为播放mid文件
  MMControl1.DeviceType=""
  MMControl1.Filename="c:mideine.mid"(eine.mid为一mid文件)
  MMControl1.Command="open"
  MMControl1.Command="play"
  这还需利用API函数实现鼠标的隐藏与出现,这里就不一一介绍了。
  部分程序代码如下(详细代码及解释请见源文件):
  DimxAsInteger
  DimyAsInteger
  DimxpAsInteger
  DimypAsInteger
  Dimlastx,lasty
  privateSubForm1_KeyDown(KeyCodeAsinteger,ShiftAsInteger)
  Endscrnsave'结束屏幕保护程序
  EndSub
  PrivateSubForm1_Load()
  Move0,0,Screen.Width,Screen.Height'让form1全屏显示
  hidemouse'隐藏鼠标
  x=l000'蝴蝶的开始位置
  y=l000
  xp=80'移动量
  yp=80
  Image5.Picture=Imagel.Picture
  '确定翅膀张开的图形是“右飞”,蝴蝶向右飞
  Image6.Picture=Image2.Picture
  '确定翅膀合上的图形是“右合”
  Image7.Picture=Image1.Picture
  MMControl1.Command="close"'确保MCI控件已关闭
  MMControl1.DeviceType=""
  '启动程序就播放mid声音文件
  MMControl1.filename="c:mideine.mid"
  MMControl1.Command="open"
  MMControl1.Command="play"
  EndSub
  PrivateSubForm1_MouseMove(ButtonAsinteger,ShiftAsInteger,xAsSingle,yAsSingle)
  IfIsEmpty(lastx)OrIsEmpty(lasty)Then
  lastx=x
  lasty=y
  EndIf
  IfAbs(lastx-x)>2OrAbs(lasty-y)>2Then
  endscrnsave
  EndIf
  lastx=x
  lasty=y
  EndSub
  PrivateSubForm1_Unload(CancelAsinteger)
  MMControl1.Command="close"
  UnloadMe
  EndSub
  PrivateSubTimer1_Timer()
  '判断mid文件是否播放完,如果播放完,进行重播
  IfMMControl1.Poesition=895Then
  '些mid文件的长度(mid文件的长度,可建立一Label控件,在时钟控件中令
  'Lagel1.caption=mmcontrol1.position,就可动态显示播放mid
  '文件的位置,当mid播放完,就可求出此mid文件的长度。)
  MMControl1.Command="prev"
  '回到此mid文件的开始位置
  MMControl1.Command="play"'播放
  EndIf
  x=x xp'增加移动量
  y=y yp
  Ifx>=Form1.ScaleWidth-Image1.WidthThen
  '右边界判断
  Image5.Picture=Image3.Picture'换图像
  Image6.Picture=Image4.Picture
  x=Form1.ScaleHeight-Image1.Width
  xp=(-1)*xp'改变移动量
  EndIf
  Ifx<=0Then
  Image5.Picture=Image1.Picture
  Image6.Picture=Imege2.Picture
  x=0
  xp=(-1)*xp
  EndIf
  Ify>=Form1.ScaleHeight-Image1.HeightThen
  y=Form1.ScaleHeight-Image1.Height
  yp=(-1)*yp
  EndIf
  Ify<=OThen
  y=O
  yp=(-1)*yp
  EndIf
  IfImage7.Picture=Image5.PictureThen
  '不断改变图象以实现翅膀的一张一合。
  Image7.Picture=Image6.Picture
  Else
  Image7.Picture=Image5.Picture
  EndIf
  Image7.Movex,y'最关键的一步蝴蝶的移动
  EndSub
  模块中的代码:
  DeclareFunctionShowCursorLib"user32"(ByValbSbowAsLong)AsLong
  subendscrnsave()'结束此程序
  showmouse
  End
  EndSub
  Subshowmouse()
  WhileShowCursor(True)<0
  Wend
  EndSub
  SubHidemouse()'隐藏鼠标
  WhileShowCursor(False)>=0
  Wend
  EndSub
  subMain()
  IfApp.PrevInstance=TrueThen
  ExitSub
  EndIf
  Form1.Show
  EndSub->

精彩图集

赞助商链接