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