这段开源代码是什么意思啥意思

精灵公主这段代码 是什么意思_饥荒吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:193,607贴子:
精灵公主这段代码 是什么意思
我要修改 他的属性local function phasechange(inst, data)ponents.health:GetPercent() & .6 ponents.hunger.current & 60 then
inst:AddTag(&Valkyrieh&) ponents.health:GetPercent() & .6 then inst:RemoveTag(&Valkyrieh&)
endif inst.strength == &full& then ponents.hunger.current & 40 and inst:HasTag(&Valkyrie&) and inst:HasTag(&Valkyrieh&) then
inst.strength = &Valkyrie&
inst.AnimState:SetBuild(&musha_battle&)inst:RemoveTag(&crazy&)
bat:SetAttackPeriod(.15)<bat:SetAreaDamage(0, 0)
inst:RemoveEventCallback(&attacked&, Onfreeze)<ponents.health.fire_damage_scale = 0<ponents.temperature.hurtrate = 1
ponents.talker:Say(&我 是 女 武 神 !&)
ponents.hunger.current & 40 ponents.hunger.current &= 120 and not inst:HasTag(&Valkyrieh&) then
inst.strength = &normal&
inst.AnimState:SetBuild(&musha_normal&)inst:RemoveTag(&crazy&)
bat:SetAttackPeriod(.5)<bat:SetAreaDamage(0, 0)
inst:RemoveEventCallback(&attacked&, Onfreeze)<ponents.health.fire_damage_scale = 1<ponents.temperature.hurtrate = 1
---ponents.talker:Say(&有 点 饿 了.&)
ponents.hunger.current & 40 and inst:HasTag(&berserk&) then
inst.strength = &berserk&
inst.AnimState:SetBuild(&musha_hunger&)inst:AddTag(&crazy&)
bat:SetAttackPeriod(.05)<bat:SetAreaDamage(2, .25)
inst:ListenForEvent(&attacked&, Onfreeze)<ponents.health.fire_damage_scale = 1<ponents.temperature.hurtrate = 0
ponents.talker:Say(&唔 啊 啊 啊 啊 啊...&)
endelseif inst.strength == &Valkyrie& then
ponents.hunger.current & 40 ponents.hunger.current & 120 and not inst:HasTag(&Valkyrieh&) then
inst.strength = &normal&
inst.AnimState:SetBuild(&musha_normal&)inst:RemoveTag(&crazy&)
bat:SetAttackPeriod(.5)<bat:SetAreaDamage(0, 0)
inst:RemoveEventCallback(&attacked&, Onfreeze)<ponents.health.fire_damage_scale = 1<ponents.temperature.hurtrate = 1
ponents.talker:Say(&好 了. 恢 复 健 康&)
ponents.hunger.current & 120 and not inst:HasTag(&Valkyrieh&) then
inst.strength = &full&
inst.AnimState:SetBuild(&musha&)inst:RemoveTag(&crazy&)
bat:SetAttackPeriod(.6)<bat:SetAreaDamage(0, 0)
inst:RemoveEventCallback(&attacked&, Onfreeze)<ponents.health.fire_damage_scale = 0<ponents.temperature.hurtrate = 1
ponents.talker:Say(&现 在 安 全 了&)
ponents.hunger.current & 40 and inst:HasTag(&berserk&) then
inst.strength = &berserk&
inst.AnimState:SetBuild(&musha_hunger&)inst:AddTag(&crazy&)
bat:SetAttackPeriod(.05)<bat:SetAreaDamage(2, .25)
inst:ListenForEvent(&attacked&, Onfreeze)<ponents.health.fire_damage_scale = 1<ponents.temperature.hurtrate = 0
ponents.talker:Say(&唔 啊 啊 啊 啊 啊...&)
endelseif inst.strength == &normal& then ponents.hunger.current & 40 and inst:HasTag(&Valkyrie&) and inst:HasTag(&Valkyrieh&) then
inst.strength = &Valkyrie&
inst.AnimState:SetBuild(&musha_battle&)inst:RemoveTag(&crazy&)
bat:SetAttackPeriod(.15)<bat:SetAreaDamage(0, 0)
inst:RemoveEventCallback(&attacked&, Onfreeze)<ponents.health.fire_damage_scale = 0<ponents.temperature.hurtrate = 1
ponents.talker:Say(&战 斗 !!&)
ponents.hunger.current & 120 and not inst:HasTag(&Valkyrieh&) then
inst.strength = &full&
inst.AnimState:SetBuild(&musha&)inst:RemoveTag(&crazy&)
bat:SetAttackPeriod(.6)<bat:SetAreaDamage(0, 0)
inst:RemoveEventCallback(&attacked&, Onfreeze)<ponents.health.fire_damage_scale = 0
--ponents.talker:Say(&心 情 愉 快 !&) ponents.hunger.current & 40 and inst:HasTag(&berserk&) then
inst.strength = &berserk&
inst.AnimState:SetBuild(&musha_hunger&)inst:AddTag(&crazy&)
bat:SetAttackPeriod(.05)<bat:SetAreaDamage(2, .25)
inst:ListenForEvent(&attacked&, Onfreeze)<ponents.health.fire_damage_scale = 1<ponents.temperature.hurtrate = 0
ponents.talker:Say(&唔 啊 啊 啊 啊...&)
endelseif inst.strength == &berserk& then ponents.hunger.current & 40 and inst:HasTag(&Valkyrie&) and inst:HasTag(&Valkyrieh&) then
inst.strength = &Valkyrie&
inst.AnimState:SetBuild(&musha_battle&)inst:RemoveTag(&crazy&)
bat:SetAttackPeriod(.15)<bat:SetAreaDamage(0, 0)
inst:RemoveEventCallback(&attacked&, Onfreeze)<ponents.health.fire_damage_scale = 0<ponents.temperature.hurtrate = 1
ponents.talker:Say(&来 吧!!&) ponents.hunger.current & 120 and not inst:HasTag(&Valkyrieh&) then
inst.strength = &full&
inst.AnimState:SetBuild(&musha&)inst:RemoveTag(&crazy&)
bat:SetAttackPeriod(.6)<bat:SetAreaDamage(0, 0)
inst:RemoveEventCallback(&attacked&, Onfreeze)<ponents.health.fire_damage_scale = 0<ponents.temperature.hurtrate = 1
ponents.talker:Say(&... 我 不 记 得 我 吃 了 什 么?&) ponents.hunger.current & 40 ponents.hunger.current & 120 and not inst:HasTag(&Valkyrieh&) then
inst.strength = &normal&
inst.AnimState:SetBuild(&musha_normal&)inst:RemoveTag(&crazy&)
bat:SetAttackPeriod(.5)<bat:SetAreaDamage(0, 0)
inst:RemoveEventCallback(&attacked&, Onfreeze)<ponents.health.fire_damage_scale = 1<ponents.temperature.hurtrate = 1
ponents.talker:Say(&有 点 累 了..&)
镇楼 可能(明显)一次...
刚冲的300麦子刀币,在...
手贱抱着试试的心态下洞...
就是这个的代码
基地图镇楼
自从在求生之路群里看到...
吧友来帮忙吧
都没有兑换码 是不是应...
你要我一行一行给你翻译?
在编辑musha不同血量和饥饿时的几个状态。
贴吧热议榜
使用签名档&&
保存至快速回贴大侠帮忙逐行给小弟我解释上这段代码的意思 - JavaScript当前位置:& &&&大侠帮忙逐行给小弟我解释上这段代码的意思大侠帮忙逐行给小弟我解释上这段代码的意思&&网友分享于:&&浏览:3次大侠帮忙逐行给我解释下这段代码的意思&script&var
highlightcolor='#eafcd5';//此处clickcolor只能用win系统颜色代码才能成功,如果用#xxxxxx的代码就不行,还没搞清楚为什么:(var
clickcolor='#FF00FF';function
changeto(){source=event.srcEif
(source.tagName==&TR&||source.tagName==&TABLE&)while(source.tagName!=&TD&)source=source.parentEsource=source.parentEcs
source.//alert(cs.length);if
(cs[1].style.backgroundColor!=highlightcolor&&source.id!=&nc&&&cs[1].style.backgroundColor!=clickcolor)for(i=0;i&cs.i++){ cs[i].style.backgroundColor=}}function
changeback(){if
(event.fromElement.contains(event.toElement)||source.contains(event.toElement)||source.id==&nc&)returnif
(event.toElement!=source&&cs[1].style.backgroundColor!=clickcolor)//source.style.backgroundColor=originalcolorfor(i=0;i&cs.i++){ cs[i].style.backgroundColor=&&;}}function
clickto(){source=event.srcEif
(source.tagName==&TR&||source.tagName==&TABLE&)while(source.tagName!=&TD&)source=source.parentEsource=source.parentEcs
source.//alert(cs.length);if
(cs[1].style.backgroundColor!=clickcolor&&source.id!=&nc&)for(i=0;i&cs.i++){ cs[i].style.backgroundColor=}elsefor(i=0;i&cs.i++){ cs[i].style.backgroundColor=&&;}}------解决方案--------------------
应该用英文单引号var clickcolor='#FF00FF';
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有var rdd1 = sc.makeRDD(1 to 5,2)//rdd1有两个分区scala& var rdd3 = rdd1.mapPartitions{ x =& {
| var result = List[Int]()
while(x.hasNext){
i += x.next()
result.::(i).iterator
| }}rdd3: org.apache.spark.rdd.RDD[Int] = MapPartitionsRDD[84] at mapPartitions at :23//rdd3将rdd1中每个分区中的数值累加scala& rdd3.collectres65: Array[Int] = Array(3, 12)scala& rdd3.partitions.sizeres66: Int = 2上面是样例代码.
1 :: List(2, 3) = List(2, 3).::(1) = List(1, 2, 3)
看一下scala文档啊 说的就是 『Adds an element at the beginning of this list』 最后就是返回这个 iterator
已有帐号?
无法登录?
社交帐号登录
评论简直不能看请问下面这段代码是什么意思(每一行),Const SRCCOPY = &HCC0020Const MF_BITMAP = &H4&Const MF_BYPOSITION = &H400&nWidth = pic.Width \ Screen.TwipsPerPixelXnHeight = pic.Height \ Screen.TwipsPerPixelYhMenuID = GetSubMenu(GetMenu(Me.hwnd),0)hTempDC = CreateCompatibleDC(pic.hdc)For i = 0 To 1hBitmap = CreateCompatibleBitmap(pic.hdc.nWidth,nHeight)lTempID = SelectObject(hTempDC,hBitmap)lresult = BitBlt(hTempDC,0,0,nWidth,nHeight,pic.hdc,0,0,SRCCOPY)lTempID = SelectObject(hTempDC,lTempID)m_item1(i).Caption = ""lresult = ModifyMenu(hMenuID,i,MF_BYPOSITION Or MF_BITMAP,GetMenuItemID(hMenuID,i),hBitmap)Next ilresult = DeleteDC(hTempDC)是VB中的代码
落落为君10851
VB中实现图像特技的一种方法杭州 包世民
在多媒体程序设计中,为了美化显示屏幕,增加画面的动感,常常要用天各种图像显示特技.图像的切换技术能明显美化画面.用Visual Basic编制这类程序时,由于VB自身没有这种切换功能,因此需要利用第三方控件或调用W indowsAPI函数BitBlt来实现这种功能.本文介绍用BitBlt函数实现画面的各种切换方法,供大家参考.
假设有5个图像文件(Picture1-Picture5),我们的目标是让这5幅画自动地循环显示,每幅画以某种切换方式出现,当有击鼠标动作时退出程序.
1 创建项目文件:
运行VB,建立一个新工程文件Project1,加入一个新的Form名称为Form1,和一个模块文件Modull,在Form1中加入一个图画框Picture1和一个定时器Timer1.
设置各控件的属性如下:Form1:AutoRedraw:TrueScaleMode:3Picture1:AutoRedraw:TrueScaleMode:3Visible:False
2 代码编写Modull.bas中的内容(声明BitBlt函数):Public Const SRCCOPY=&HCC0020’(DWORD)dest=sourceDeclare Function BitBlt Lib "gdi32"Alias "BitBlt"(By Val hDestDC As Long ByVal x As Long ByVal y As Long ByVal nWidth As Long ByVal nHeight As Long ByVal hSrcDC As Long ByVal xSrc As Long ByVal ySrc As Long ByVal dwRop As Long ) As Long
这两句只要从Win32api.txt文件中粘贴即可.
Form1中的代码:
在Declare中定义全局变量:Const bmpfilemax=5&总共5个bmp文件Dim bmpfile(bmpfilemax)As String&bmp 文件的文件名数组Dim drawbmpmode(bmpfilemax) As Integer&各画显示时的切换方式Dim bmpnum,movestep,xmax,ymax As IntegerDim kxy As Single &x,y二个方向的比例
程序运行时先作初始化工作:Private Sub Form-Load ()bmpnum=0 &当前文件号=0,第一个文件bmpfile(0)=App.Path+''\bmp1.bmp'' bmpfile(1)=App.Path+''\bmp2.bmp''bmpfile(2)=App.Path+''\bmp3.bmp''bmpfile(3)=App.Path+''\bmp4.bmp''bmpfile(4)=App.Path+''\bmp5.bmp''drawbmpmode(0)=1drawbmpmode(1)=5drawbmpmode(2)=3drawbmpmode(3)=4drawbmpmode(4)=2movestep=0 &步进参数xmax=Form.ScaleWidth/2ymax=Form.ScaleHeight/2kxy =ymax/xmaxPicture1.Picture=LoadPicture(bmpfile(bmpnum))Timer1.Interval=30 &定时器起动End Sub
响应鼠标:Private Sub Form-Click ()End &当有击鼠标动作时程序结束End Sub
切换演示工作主要在定时器中完成:Private Sub Timer1-Timer ()hDestDC=Form1.HDC&目标DChSrcDC=Picture1.hDC&源DC,画是从不可见的Picture1中拷贝到窗体drawflag =drawbmpmode(bmpnum)&当前画出现的方式Select Case drawflagCase 1 &从中间逐步放大endmax=xmax&用于结束判断X1=xmax-movestepw=movestep*2Y1=Cint(ymax-movestep*kxy)h=Cint(2*movestep*kxy)i=BitBlt(hDestDC,X1,Y1,w,h,hSrcDC,X1,Y1,SRCCOPY)Case 2 &从左到右endmax=xmaxw=movestep*2h=Form1.ScaleHeighti=BitBlt(hDestDC,0,0,w,h,hSrcDC,X1,Y1,SRCCOPY)Case 3 &左右向中间endmax=xmaxw=movesteph=Form1.ScaleHeighti=BitBlt(hDestDC,0,0,w,h,hSrcDC,0,0,SRCCOPY) &左面部分X1= Form1.ScaleWidth-movestepi=BitBlt(hDestDC,X1,0,w,h,hSrcDC,X1,0,SRCCOPY) &左面部分Case 4 &栅条状endmax=CInt(2*xmax/10) &共分阶10条tempi=CInt(2*xmax/10)w=movesteph=Form1.ScaleHeightFor ij=0 To 9i=BitBlt(hDestDC,tempi*ij,0,w,h,hSrcDC,tempi*ij,0,SRCCOPY)Next ijCase 5 &棱形状endmax=CInt(2*xmax/10)tempi=CInt(2*xmax/10)w=movestepFor ih=0 To w-1For ik=0 To 9For ij=0 To 9l=tempi*ik+tempi/2t=tempi*ij+tempi/2i=BitBlt(hDestDC,1-(w-ih),t-ih,(w-ih)*2,1,hSrcDC,1-(w-ih), t-ih, SRCCOPY)i=BitBlt(hDestDC,1-(w-ih),t+ih,(w-ih)*2,1,hSrcDC,1-(w-ih), t+ih, SRCCOPY)Next ijNext ikNext ihEnd SelectForm1.Refreshmovestep=movestep+2 &步进增加If movestep>endmax Then&若步进够大,画面都已显示,本张画结束切换bmpnum=bmpnum+1 &进到下一张画If bmpnum>=bmpfilemax Then&若5张画已显示完则再从第一张开始bmpnum=0End Ifmovestep=0Picture1.Picture=LoadPicture(bmpfile(bmpnum))End IfEnd Sub 放置“透明”的图片
在 VB 中,如果你试着把一只有鸟的图片放到背景的一棵树上,你就会发现树会被鸟遮住一个矩形的区域(即鸟的图片矩形).我们可以通过以下方法使图片上非鸟的其它部分变透明:
我们可以利用一个 WinAPI 函数 BitBlt 对图形进行一系列的位操作来达到此目的.
函数声明:
Declare Function BitBlt Lib "gdi32" Alias "BitBlt" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
参数解释:
目标环境:hDestDC——目标设备环境;x——左上角;y——顶端;nWidth——宽;nHeight——高
源环境:hSrcDC——源设备环境;xSrc——源左上角;ySrc——源顶端;
dwRop——位处理操作,如 vbSrcAnd;vbSrcAnd;vbSrcCopy;vbSrcErase;vbSrcInvert 等
(目标环境或源环境只能是 Picture, Form 或 Printer 对象.各单位为象素.)
进行处理之前,我们需要对鸟的图片进行处理:先复制一份相同的图形,将其应该透明之处(鸟的背景)设置为黑色(设此图为sPic),再将另一图做以下处理:要复制的地方(鸟)设置为黑色,其余地方设置(鸟的背景)为白色(设此图为Mask).设树的图形为名dPic.
最后,请加入以下代码:
R=BitBlt(dPic.hdc,0,0,sPic.Width,sPic.Height,Mask.hdc,0,0,vbScrCopy)
R=BitBlt(dPic.hdc,0,0,sPic.Width,sPic.Height,sPic.hdc,0,0,vbScrInvert)
1、VB 中的 PaintPicture 方法提供类似功能,但速度不及此方法.
2、在此方法上稍微加入一些代码,就不难实现动画的显示.
3、VB 例子中的 CallDlls 就使用此方法. 在图片上平滑移动文字
在很多电影及游戏的结尾,你可以看到文本在图片上平滑地卷到屏幕的上方(如电影的版权声明等),在 VB 中,可以使用以下步骤及方法实现此“特技”:
1、新建一工程文件,缺省创建 Form1;
2、在 Form1 上放置 Picture Box 控件 Picture1,选择背景图片;
3、选择 Picture1(即以它为一个容器),在上面放置 Label 控件 Label1,设置 Label1 的 BorderStyle 属性为 0(透明--即在控件后的背景色和任何图片都是可见的),设置 Caption 为待移动的字符串;
4、在 Form1 上放置 Timer 控件 Timer1,设置 Enabled 属性为 True,设置 Interval 为 100,在 Timer1 的 Timer 事件中加入以下程序:
Label1.Top=Label1.Top - iStep
Interval 决定图形移动速度;iStep 决定图形移动的平滑程度.
5、在 Form_Load 事件中加入以下程序:Lable1.Top = Picture1.ScaleHeight
到此,你就可以实现文字在图形上的平滑移动.本例产生的效果是由下向上移动,如果你将程序稍加改变,就可以实现由下到上,由左到右,由右到左等“特技”效果. 播放 AVI
声明:Declare Function mciSendString Lib "winmm.dll" Alias _"mciSendStringA" (ByVal lpstrCommand As String, ByVal _lpstrReturnString As String, ByVal uReturnLength _As Long, ByVal hwndCallback As Long) As Long
代码:Dim returnstring As StringFileName As Stringreturnstring = Space(127)FileName = "C:\A1.avi"erg = mciSendString("open " & Chr$(34) & FileName & Chr$(34) & " type avivideo alias video", returnstring, 127, 0)erg = mciSendString("set video time format ms", returnstring, 127, 0)erg = mciSendString("play video from 0", returnstring, 127, 0)'记着关闭!erg = mciSendString("close video", returnstring, 127, 0) 捕捉屏幕图象
声明:Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As LongPrivate Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As LongPrivate Declare Function EmptyClipboard Lib "user32" () As LongPrivate Declare Function SetClipboardData Lib "user32" (ByVal wFormat As Long, ByVal hMem As Long) As LongPrivate Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As LongPrivate Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As LongPrivate Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As LongPrivate Declare Function CreateDC Lib "gdi32" Alias "CreateDCA" (ByVal lpDriverName As String, ByVal lpDeviceName As String, ByVal lpOutput As String, lpInitData As Long) As LongPrivate Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As LongPrivate Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As LongPrivate Declare Function CloseClipboard Lib "user32" () As Long
函数:Sub ScrnCap(Lt, Top, Rt, Bot)rWidth = Rt - LtrHeight = Bot - TopSourceDC = CreateDC("DISPLAY", 0, 0, 0)DestDC = CreateCompatibleDC(SourceDC)BHandle = CreateCompatibleBitmap(SourceDC, rWidth, rHeight)SelectObject DestDC, BHandleBitBlt DestDC, 0, 0, rWidth, rHeight, SourceDC, Lt, Top, &HCC0020Wnd = Screen.ActiveForm.hwndOpenClipboard WndEmptyClipboardSetClipboardData 2, BHandleCloseClipboardDeleteDC DestDCReleaseDC DHandle, SourceDCEnd Sub
以下的示例把屏幕图象捕捉后,放到Picture1 中.Sub Command1_Click()Form1.Visible = FalseScrnCap 0, 0, 640, 480Form1.Visible = Truepicture1 = Clipboard.GetData()End Sub 创建自定义的光标谭翁
当在设计一个应用程序时,Visual Basic允许程序员将许多控件的MousePointer属性设计成12个预先定义好的鼠标光标之一.典型情况是程序员希望改变一个控件的MousePointer属性,以告诉程序的用户有某种类型的行为被进行了.例如,沙漏光标被用来指示一个消耗时间的过程.另外,可以改变光标来仅仅通知用户他已经将鼠标的指针指向了一个特殊的控件,如一个文件列表框.要做到这些,程序员只需要简单地在Visual Basic程序中在适当时刻改变该控件的MousePointer属性即可.
然而,有些程序员或许会希望显示一个12个预定义形状中的光标之外的光标.本文说明如何创建一个不同的鼠标指针(光标),包括为一个没有MousePointer属性的控件创建光标.改变光标(鼠标指针)
要在Visual Basic应用程序中将光标(鼠标指针)改变成个不同的形状,可以添加代码来改变希望监视的控件的MouseMove和DragOver事件.
MouseMove事件所包含的代码用于触发该控件的Drag方法.当鼠标在被选中的控件上移动的时候,轮流显示新的鼠标指针.当鼠标指针离开该控件时,则DragOver事件被触发.在Visual Basic程序中,可以重新复位此Drag属性,以便以前的鼠标指针能够被再次显示出来.样例程序
下面的程序实现当鼠标指针移动到一个文件列表框控件上时,将其改变成不同的形状.
在Visual Basic中开始一个新的工程,采用缺省的方法建立Form1.
在Form1上添加一个文件列表框控件,采用缺省的方法建立File1.
将File1控件的DragIcon属性设置为所选择的.ICO文件.
将如下代码添加到File1的MouseMove事件中:Private Sub File1_MouseMove(ButtonAs Integer, Shift As Integer, X As Single, Y As Single)File1.Drag 1 'icon onEnd Sub
将如下代码添加到Form1的DragOver事件中:Private Sub Form_DragOver(Source As Control, X As Single, Y As Single, State As Integer)File1.Drag 0 'icon offEnd Sub
按下F5功能键执行此程序.得到的运行结果是:将鼠标指针移动到该文件列表框控件上时,程序将把所选中的.ICO文件作为缺省的鼠标光标;将鼠标指针离开该控件时,光标则会自动恢复为缺省的形状. 用VB进行多媒体程序设计初步
VB(Visual Basic)具有很强的多媒体处理控制功能,VB的多媒体控制MCI(Media control interface)包括一套控制音频和视频设备但具有与设备无关的命令,用它来进行多媒体设计是很方便的.比如:你也许想拥有一个自己编写的CD播放器,那么利用VB的MCI只需写几行代码就可
生成一个功能比较齐全的CD播放器.下面简单谈谈用VB的MCI进行多媒体设计的初步知识并给出一个非常简单的CD播放器的例子.
在使用MCI之前必须安装好多媒体设备如声卡、CD—ROM等以及这些设备的驱动程序,否则MCI将不听指挥.一、MCI控制的安装
MCI控制在VB不同版本中的安装方法是不一样的.在VB 3.0专业版中,MCI控制文件为MCI.VBX,在VB 4.0中MCI控制文件为MCI16.OCX(16位)、MCI32.OCX(32位).一般情况下MCI控制在启动VB之后并没有加入到工具箱中(TOOLBOX),需要自己动手安装它.
1.VB 3.0中MCI的安装.
打开VB的FILE菜单,选择Add File项,从Windows\system目录下找到MCI.VBX,选择OK即可,这时你将发现TOOLBOX最后又多了一个工具,这就是MCI.如果你经常要用它,建议在VB目录下找到Autoload.mak文件,用字处理软件打开它,把MCI.VBX添加在其中,这样每次启动VB时就将其自动调入.
2.VB 4.0中MCI的安装.
VB 4.0支持16位和32位两种系统,在WINDOWS 3.1下只能使用16位系统.MCI不能和VB 3.0中一样用Add File调入,如果你这样做将会发现系统提示错误,需在Autoload.mak文件中调入.笔者打开Autoload.mak文件后发现调用格式为:OBJECT={序列号}#1.0#0;文件名,不知道MCI16.OCX的序列号是无法安装的.幸好在VB目录下的子目录SAMPLE下有一个MCI的子目录,进入它可以看到有一个MCITEST.MAK文件,打开它可以看到有:Object={C1A8AF28-B-8FB0-CA3}#1.0#0;MCI32.OCX一行(也许您的序列号不一定和这相同),将这一行复制到Autoload.mak文件中即可.由于本人使用的是WINDOWS 3.1,在安装VB 4.0时32位系统无法装入,硬盘中根本没有MCI32.OCX文件,VB何以将MCI32.OCX调入呢?经试验发现VB以序列号选择文件,可能上述序列号是MCI16.OCX文件的序列号,进一步试验发现即使将序列号后面的MCI32.OCX去掉也可调入,这进一步说明了VB 4.0中一个OCX文件有一个对应的序列号,因此绝对不能改变序列号,否则将无法正确调入所需的文件.MCI安装完毕,用鼠标双击工具箱的MCI图标,如果在Form中出现9个熟悉的按扭,那么安装就成功了. 二、MCI的属性和事件
MCI提供许多关于MCI控制方面的属性和事件.比较常用的属性有:
Button visible 决定该按钮在MCI控制中是否可见.
Command 要执行的MCI命令,如Open Close Play Stop Eject等.
Device Type 要打开的MCI设备类型,如动画播放设备、MIDI序列发生器、激光视盘机、WAV文件播放器、录相机等.
Filename 使用Open命令打开或Save命令保存的文件名.
Length 确定一个文件或CD唱片的长度.
Track 指定特定的轨道,供Tracklength和Trackposition使用.
Tracks 当前MCI设备的轨道数.
Tracklength 在当前时间格式下,传回Track所指轨道的时间长度.
Trackposition 在当前时间格式下,传回Track所指轨道的起始位置.
Visible 决定在运行时刻多媒体MCI控制是否可见.比较常用的事件有:
Buttonclick 当用户在多媒体MCI控制的按钮上按下或释放鼠标时产生该事件,每一个Buttonclick事件缺省执行一个MCI命令.
Buttoncompleted 当多媒体MCI控制按钮激活的MCI命令完成后发送.
Statusupdate 这个事件可监测目前多媒体设备的状态信息,比如用滚动条来表示当前轨道的位置.
详细的属性和事件的用法请参看控制帮助文件. 三、CD播放器的例子
对初学者来说,能利用入门知识编写一个的成功小程序是很鼓舞人心的,下面我们来编写一个非常简单的例子:迷你CD播放器.
在MCI调入Toolbox之后,双击MCI工具,将会在Form中出现9个按钮,用鼠标移动这些按钮至合适的位置,然后双击Form窗体,把下面的代码加入到事件中:
Sub Form_Load()
MMControl1.DeviceType = “CDaudio" 'MCI设备类型为CD唱片
mand = “open" '打开设备
Sub Form_Unload(Cancel As Integer)
mand = “close" '退出时关闭MCI设备
保存文件,在CD驱动器中放入一张CD唱片,然后运行,你将发现九个按钮中Prev、Next、Play、Eject四个按钮变黑(有效状态),点一下Play按钮,音乐出来了!若驱动器中无CD盘则所有按钮都处于无效状态.这样一个简易CD播放器就完成了,它具有四种功能,但自己动手写的代码只有上面加注释的三行.这个CD播放器有点太简单了,下面就看你的了,你可以加入一些文字信息如开发时间、作者、版权等,再进一步学习MCI可加入其他功能如显示播放时间、曲目等. VB的多媒体控件VBPLAY.VBX简介刘强
VB是一种编程式多媒体开发工具,用VB开发多媒体的方法有很多.归结一下有以下四种:自行编写程序代码实现,使用对象连接和嵌入OLE2.0,调用API有关多媒体的函数,使用第三方VB控件开发商制作的多媒体控件VBX.其中第四种方法最简便,效果也最明显.
下文将简要介绍Autodesk公司的多媒体控件VBPLAY.VBX的功能和使用方法.
启动VB专业版后,选择File—Add File…,在WINDOWS的SYSTEM目录下选择VBPLAY.VBX,将VBPLAY.VBX加入到工具箱中,就可以看到ANIMATION著名的图标.它的主要属性介绍如下:
1、具有基本属性:
name,height,width,top,left,forecolor,backcolor,enabled,visible,index, 还有一些特殊属性.
2、BorderStyle属性,设定边界条件.分别为0-none,表示无边界,1-Fixed Single,表示固定单线框,2-Sizable(缺省值),可调尺寸,3-Fixed Double,固定双线框.这些属性与其他控件类似.
3、All Color:保留所有WINDOWS系统可用的颜色.Colorcycling:保留WINDOWS系统调色板的颜色.
4、AniHeight 和Aniwidth,设定一个动画的幅面.
5,Autoplay属性,设定自动播放功能.如果设定为TRUE,则程序运行时动画文件自动播放,若设为FALSE,则需要用程序代码控制.
6、BeginFade,BeginFadeTime,Endfade,EndfadeTime,这是VBPLAY.VBX最精彩的部分,用这几个简单的属性就可以实现图象的淡入淡出效果.其中:
BeginFade表示动画开始时的效果设定.有三个选择项.cut:切换效果,无淡入淡出;fade to/From Black 即淡入效果;Fade to/From White 即淡出效果.以前必须调用Bitbil这样的W INDOWS API函数才能实现的功能现在只需设定属性即可实现.
BeginFadeTime设定淡入淡出效果执行的时间,与Timer的属性Interval一样,以毫秒为单位.
EndFade和Endfadetime表示结尾处的淡入淡出效果设定,其选项与BeginFade和BeginFadeTime相似.
7、FullScreen:全屏幕播放.
8、HideAnimation:如果不是在播放状态下,即在设计状态下,不要将画面显示出来.
9、LoopFrame:设定是否循环播放.可选值为TRUE或FALSE.
10、MemoryLoad:设定为TRUE则在打开动画时将它载入内存中,这样可以得到较快的播放速度.
11、play、pause、pauseatend,设定播放、暂停以及播放完后暂停的时间,以秒为单位.
12、有关SOUND的属性:Sound属性会打开一个对话框,在对话框中选择背景音乐,以真正实现“影音同步”,SoundDelay属性设定声音播放的延迟时间,以毫秒为单位.如果为负数,则表示在动画前先播放音乐,SoundRepeats属性声音播放的次数.
13、AniSettings属性,其上有“Click Here For Dialog”的标识,单击后会弹出对话框.以上所提到的大部分属性可以在对话框中设定,“TEST”按钮可以测试效果,“TRANSITIONS”可以设定淡入淡出的效果.
下面给出一例,在VB专业版中调试通过.
各控件的属性设置如下:
FORM1: caption:动画演示
windowstate:2-maxizimed
ANIMATION1: ANIMATION:C:\DEMO\DEMO.FLC
BeginFade:fade to/From Black
BeginFadeTime:3000
EndFade:Fade to/From White
Endfadetime:3000
HideAnimation:true
FullScreen:true
Sound:C:\DEMO\DEMO.WAV
SoundDelay:-2000
SoundRepeats:0
Type:(FLI/FLC)
COMMAND1: caption:播放
COMMAND2: caption:停止
而源程序只有两行:
Sub Command3D1_Click ()
animation1.Play = True
Sub Command3D2_Click ()
注意例子中播放3DS的FLI/FLC文件必须在WINDOWS的SYSTEM的目录中载入播放FLI/FLC动画文件的动态连接库AAPLAY.DLL.
这样我们就实现了一幅影音同步的多媒体作品,是不是很简单?不要再犹豫了,赶快上机试一下,你会叹服于VBPLAY.VBX的强大功能. 在VB应用程序中恰当的使用声音刘强
众所周知,Visual Basic是功能非常强大的多媒体开发工具,它有丰富的函数和方法处理各种各样的多媒体信息,能够很灵活的操作图形、声音、动画、影象等多媒体素材.但有时我们使用Visual Basic开发非多媒体应用程序,并不需要在应用程序中大量的使用声音,而只是需要在特定的场合出现.如Windows的警告声.这就要求程序员在恰当的环境中恰当的使用声音文件,既不失去VB在多媒体方面的特长,又能够为应用程序增加吸引人的效果.
VB可以用于输出声音的方法很多,归结一下,大概有以下四种:
1.利用Beep语句.
这是VB系统提供的一条利用计算机扬声器发声的语句,它只能够发出简单的蜂鸣声,但在应用程序中大量用于输出警告的信息.如下例允许用户在文本框中输入数字,当用户输入错误时,系统会报警提示.
Sub Text1_KeyPress (keyascii As Integer)
If keyascii
Beep:Beep: Beep
keyascii = 0
2.其实计算机的蜂鸣器也可以发出不同频率、音高的声音,从而奏出美妙的音乐.方法是调用Windows的一些有关发声的API函数.Windows系统包含十六个声音函数,它们都存放在Windows的SOUND.DRV这个驱动程序所包含的动态连接库中.其中最常用的四个函数是OpenSound,CloseSound,SetVoiceNote,StartSound.其声明格式如下:
Declare Function OpenSound Lib "Sound" () As Integer
Declare Sub CloseSound Lib "Sound" ()
Declare Function SetVoiceNote Lib "Sound" (ByVal nVoice As Integer, ByVal nValue As Integer, ByVal nLength As Integer, ByVal nCdots As Integer) As Integer
Declare Function StartSound Lib "Sound" () As Integer
在Visual Basic的通用过程中声明上述函数后,就可以象使用Visual Basic自己的函数一样使用Windows的API函数.
下面给出一个例子,只需要在窗体中放置7个按钮组成的控件数组,调用上述函数就可以简单的实现准确的音阶:
Sub Command1_Click (index As Integer)
a% = OpenSound()
Select Case index
Case 0: f = 37
Case 1: f = 39
Case 2: f = 41
Case 3: f = 42
Case 4: f = 44
Case 5: f = 46
Case 6: f = 48
End Select
m1% = SetVoiceNote(1, f, 4, 0)
m2% = StartSound()
为您推荐:
其他类似问题
扫描下载二维码}

我要回帖

更多关于 开源代码是什么意思 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信