程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB綜合教程 >> 制作帶有動畫和聲音的屏幕保護程序

制作帶有動畫和聲音的屏幕保護程序

編輯:VB綜合教程
利用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->

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved