比如说小鸟在空中飞翔,多帧位移可以实现。但同时如何用缩放实现小鸟飞远飞近?

解决方案 »

  1.   

    非常感谢这位大哥!
    刚学vb不久很多问题都不懂!
    代码:'“动画_透明处理”的窗体模块
    Option Explicit
    '变量必须先定义,才能使用
    Dim ImageNo As Integer      '当前的位图编号
    Dim IsPlaying As Boolean    '动画是否启动
    Dim lngP As Long
    Dim lngR As LongPrivate Sub Form_Load()
    ImageNo = 1   '动画从book1.bmp开始
    IsPlaying = False           '开始时,动画未启动
    '鼠标移到书上时,将出现“开始”提示
        Timer1.Interval = 200
        picback.ScaleMode = 3                                             '象素
        picback.Picture = LoadPicture(App.Path & "\p\原野.BMP")
        Picture1.AutoRedraw = True
        Picture2.AutoRedraw = True
        Picture11.AutoRedraw = True
        Picture22.AutoRedraw = True
        Picture3.AutoRedraw = True
        Picture33.AutoRedraw = True
        Picture4.AutoRedraw = True
        Picture44.AutoRedraw = True
        Picture5.AutoRedraw = True
        Picture55.AutoRedraw = True
        Picture6.AutoRedraw = True
        Picture66.AutoRedraw = True
        Picture1.Picture = LoadPicture(App.Path & "\p\1.bmp")
        Picture11.Picture = LoadPicture(App.Path & "\p\1-.bmp")
        Picture2.Picture = LoadPicture(App.Path & "\p\2.bmp")
        Picture22.Picture = LoadPicture(App.Path & "\p\2-.bmp")
        Picture3.Picture = LoadPicture(App.Path & "\p\3.bmp")
        Picture33.Picture = LoadPicture(App.Path & "\p\3-.bmp")
        Picture4.Picture = LoadPicture(App.Path & "\p\4.bmp")
        Picture44.Picture = LoadPicture(App.Path & "\p\4-.bmp")
        Picture5.Picture = LoadPicture(App.Path & "\p\5.bmp")
        Picture55.Picture = LoadPicture(App.Path & "\p\5-.bmp")
        Picture6.Picture = LoadPicture(App.Path & "\p\6.bmp")
        Picture66.Picture = LoadPicture(App.Path & "\p\6-.bmp")
        Picture1.Visible = False
        Picture11.Visible = False
        Picture2.Visible = False
        Picture22.Visible = False
        Picture3.Visible = False
        Picture33.Visible = False
        Picture4.Visible = False
        Picture44.Visible = False
        Picture5.Visible = False
        Picture55.Visible = False
        Picture6.Visible = False
        Picture66.Visible = False
    '播放声音
    'SND_ASYNC:异步演播,在播放声音时可以作其他的事
    'SND_LOOP:循环演播,播完后再重播。需与SND_ASYNC组合使用
        sndPlaySound App.Path & "\故乡的原风景 轻音乐.wav", SND_ASYNC Or SND_LOOP
    End Sub'半秒钟系统自动引发Timer事件
    Private Sub Timer1_Timer()
    '声明计数器intC为整型的静态变量
        Static intC As Integer
    'lngX和lngY表示在原野上飞舞的蝴蝶的位置
        Static lngX  As Long
        Static lngY As Long
    'intC的初值为0
        intC = intC + 1
    'intC有6种取值
        If intC = 7 Then intC = 1
    'intC=1显示1的蝴蝶
    'intC=2显示11的蝴蝶
    'intC=3显示2的蝴蝶
    'intC=4显示22的蝴蝶
        lngX = lngX - 8 '-8是X方向的增量,以象素为单位
        lngY = lngY - 6   '-6是Y方向的增量,以象素为单位
        If (lngY < -80) Or (lngX < -80) Then
            lngX = picback.Width
            lngY = picback.Height
        End If
        If intC = 1 Then
            picback.Cls          '清除蝴蝶飞舞所在的图片框
    '对张开蝴蝶的透明处理
            lngP = BitBlt(picback.hDC, lngX, lngY, _
                Picture11.Width, Picture11.Height, Picture11.hDC, 0, 0, SRCAND)
            lngP = BitBlt(picback.hDC, lngX, lngY, _
                Picture1.Width, Picture1.Height, Picture1.hDC, 0, 0, SRCINVERT)
        Else
        If intC = 2 Then
            picback.Cls          '清除蝴蝶飞舞所在的图片框
    '对闭合蝴蝶的透明处理
            lngP = BitBlt(picback.hDC, lngX, lngY, _
                Picture22.Width, Picture22.Height, Picture22.hDC, 0, 0, SRCAND)
            lngP = BitBlt(picback.hDC, lngX, lngY, _
                Picture2.Width, Picture2.Height, Picture2.hDC, 0, 0, SRCINVERT)
                Else
                If intC = 3 Then
                picback.Cls
                lngP = BitBlt(picback.hDC, lngX, lngY, _
                Picture33.Width, Picture33.Height, Picture33.hDC, 0, 0, SRCAND)
            lngP = BitBlt(picback.hDC, lngX, lngY, _
                Picture3.Width, Picture3.Height, Picture3.hDC, 0, 0, SRCINVERT)
                Else
                If intC = 4 Then
                picback.Cls
                lngP = BitBlt(picback.hDC, lngX, lngY, _
                Picture44.Width, Picture44.Height, Picture44.hDC, 0, 0, SRCAND)
            lngP = BitBlt(picback.hDC, lngX, lngY, _
                Picture4.Width, Picture4.Height, Picture4.hDC, 0, 0, SRCINVERT)
                Else
                If intC = 5 Then
                picback.Cls
                lngP = BitBlt(picback.hDC, lngX, lngY, _
                Picture55.Width, Picture55.Height, Picture55.hDC, 0, 0, SRCAND)
            lngP = BitBlt(picback.hDC, lngX, lngY, _
                Picture5.Width, Picture5.Height, Picture5.hDC, 0, 0, SRCINVERT)
                Else
                If intC = 6 Then
                picback.Cls
                lngP = BitBlt(picback.hDC, lngX, lngY, _
                Picture66.Width, Picture66.Height, Picture66.hDC, 0, 0, SRCAND)
            lngP = BitBlt(picback.hDC, lngX, lngY, _
                Picture6.Width, Picture6.Height, Picture6.hDC, 0, 0, SRCINVERT)
                End If
                End If
                End If
                End If
                End If
                End If
                End Sub
    Private Sub Timer2_Timer()
    ImageNo = ImageNo + 1   '动画下一帧
    If ImageNo > 11 Then    '如果动画已到最后一帧,则
        ImageNo = 1            '再从第一帧开始
    End If
    '在Image对象中显示动画的当前帧
    picback.Picture = LoadPicture(App.Path & "\head\head" & ImageNo & ".bmp")
    End Sub
    最好能通过键盘上下键控制!
      

  2.   

    缩放 简单点用 Image 将 Stretch 设为 True麻烦点就用 StretchBlt
      

  3.   

    加上一个 Timer 图片自己编号例如 Pic01.gif Pic02.gif Pic03.gif Pic04.gif....使用 Image 它的 Stretch 设为 True在Timer1事件里面 i自动加一(Image不停的换编号相同的图片) X 不断加100 ,该缩小或放大时改变Image1.width Image1.height