VB6编程:DirectX 2D图形学习日志23卡通动画总结

VB6编程:DirectX 2D图形学习日志23卡通动画总结
教程下载地址:https://download.csdn.net/download/gosub60/13696651
程序分析
一、初始化过程:
1、 使用了一个函数Window_Setup()来设置窗口,

Private Sub Window_Setup(Window As Form, [ByVal X As Long = -1], [ByVal Y As Long = -1], [ByVal Width As Long = -1], [ByVal Height As Long = -1], [Caption As String = " "], [Auto_Redraw As Boolean = False], [ByVal Back_Color As Long = -1])

各参数如下:
参数1:Window :窗口名称,这里用的是frmMain
参数2/3:x,y :坐标,默认-1
参数4/5:Width宽,Height高 :窗口化时窗口的宽和高 (默认-1)
参数6:Caption :窗口标题
参数7:可选
参数8:背景色,默认-1,可以用RGB指定RGB(0, 0, 0)

随后,同前边一样调用子程序:DirectX_Initialize '初始化DirectX和Direct3D。

2、加载纹理图片。同前边一样调用子程序:Load_Texture '从文件加载纹理。

将11各卡通图片写入顶点缓冲区

3、调用子程序Setup_Sprite:设置卡通精灵坐标位置,大小,速度等属性
使用下边的命令设置卡通帧数,一共有11张卡通图片,所以有11帧

Sprite.Animation_State.Number_Of_Frames = 11

在使用上边的定义时需要先:
定义一个卡通结构类型

Private Type Sprite_Type
    X As Single'卡通X坐标
    Y As Single'卡通Y坐标
    Animation_State As Animation_Type'动画状态
   End Type

定义一个动画状态结构类型

Private Type Animation_Type
    Number_Of_Frames As Long '帧数
    Current_Frame As Single '当前帧
    Frame_Counter As Long '帧_计数器
    Speed As Single '速度
    Frame_Size As RECT '框架尺寸
 End Type

定义一个RECT_SINGLE

Private Type RECT_SINGLE
    Left As Single
    Top As Single
    Right As Single
    Bottom As Single
End Type

二、 完成以上初始化后,进入Game_Loop子程序’游戏循环
在Game_Loop循环中,调用 Animate_Sprite 绘制卡通动态
①设置渲染器状态

'就在这里将alphablend多边形
    Direct3D_Device.SetRenderState D3DRS_ALPHABLENDENABLE, False

    '就在这里将赋予多边形透明度
    Direct3D_Device.SetRenderState D3DRS_ALPHATESTENABLE, True

②获得当前帧

If Int(Sprite.Animation_State.Current_Frame) > (Sprite.Animation_State.Number_Of_Frames - 1) Then
    
        Sprite.Animation_State.Current_Frame = 0
    
    End If
    
    Current_Frame = Int(Sprite.Animation_State.Current_Frame)'获得当前帧

③设置当前帧的坐标

Private Frame As RECT_SINGLE
    Frame.Left = (Sprite.X + Sprite.Animation_State.Frame_Size.Left) * Scalar.X
    Frame.Top = (Sprite.Y + Sprite.Animation_State.Frame_Size.Top) * Scalar.Y
    Frame.Right = (Sprite.X + Sprite.Animation_State.Frame_Size.Right) * Scalar.X
    Frame.Bottom = (Sprite.Y + Sprite.Animation_State.Frame_Size.Bottom) * Scalar.Y

④创建多边形

'创建多边形。
    '---------------------------------------------------------------
    With Frame
    
        Vertex_List(0) = Create_TLVertex(.Left, .Top, 0, 1, Transparency_Color, 0, 0, 0)
        Vertex_List(1) = Create_TLVertex(.Right, .Top, 0, 1, Transparency_Color, 0, 1, 0)
        Vertex_List(2) = Create_TLVertex(.Left, .Bottom, 0, 1, Transparency_Color, 0, 0, 1)
        Vertex_List(3) = Create_TLVertex(.Right, .Bottom, 0, 1, Transparency_Color, 0, 1, 1)
    
    End With
    '---------------------------------------------------------------

⑤设置纹理

'设置纹理
    Direct3D_Device.SetTexture 0, Texture(Current_Frame)
    
    Sprite.Animation_State.Current_Frame = Sprite.Animation_State.Current_Frame + Sprite.Animation_State.Speed

猜你喜欢

转载自blog.csdn.net/gosub60/article/details/111224425
今日推荐