VB6编程:DirectX 2D图形学习日志22创建卡通动画
教程下载地址:https://download.csdn.net/download/gosub60/13696651
作用:使用多幅BMP图合成一个卡通动画
源码如下:需要几个连贯的卡通图片配合。

'---------------------------------
'标题:DirectX教程
'
'描述:
'
'作者:Jacob Roman 翻译:gosub60@163.com QQ:127644712
'
'日期:12/04/2005
'
'联系人:jacob_c_roman@hotmail.com
'---------------------------------Option ExplicitPrivate Type RECT_SINGLELeft As SingleTop As SingleRight As SingleBottom As SingleEnd TypePrivate Type Animation_TypeNumber_Of_Frames As LongCurrent_Frame As SingleFrame_Counter As LongSpeed As SingleFrame_Size As RECTEnd TypePrivate Type Sprite_TypeX As SingleY As SingleAnimation_State As Animation_TypeEnd Type''2D(已转换和已点燃)顶点格式类型。
Private Type TLVERTEXX As SingleY As SingleZ As SingleRHW As SingleColor As LongSpecular As LongTU As SingleTV As SingleEnd TypePrivate Const ANIMATION_MODE_SINGLE_SHOT As Long = 0
Private Const ANIMATION_MODE_LOOP As Long = 1'一些颜色深度常数有助于使DX常数更具可读性。
Private Const COLOR_DEPTH_16_BIT As Long = D3DFMT_R5G6B5
Private Const COLOR_DEPTH_24_BIT As Long = D3DFMT_A8R8G8B8
Private Const COLOR_DEPTH_32_BIT As Long = D3DFMT_X8R8G8B8'2D(转换和点亮)顶点格式。
Private Const FVF_TLVERTEX As Long = D3DFVF_XYZRHW Or D3DFVF_TEX1 Or D3DFVF_DIFFUSE Or D3DFVF_SPECULARPrivate DirectX8 As DirectX8 '主DirectX对象。
Private Direct3D As Direct3D8 '控制3D一切。
Private Direct3D_Device As Direct3DDevice8 '表示硬件渲染
Private Direct3DX As D3DX8Private Window_Width As Long
Private Window_Height As LongPrivate Fullscreen_Width As Long
Private Fullscreen_Height As Long
Private Color_Depth As LongPrivate Fullscreen_Enabled As Boolean '帮助确定它是否为全屏模式。
Private Running As Boolean '帮助确定主游戏循环是否正在运行。Private Vertex_List(3) As TLVERTEX '4个顶点将构成一个正方形Private Texture() As Direct3DTexture8Private Sprite As Sprite_TypePrivate Scalar As D3DVECTOR2Private Frame As RECT_SINGLEPrivate Sub Window_Setup(Window As Form, Optional ByVal X As Long = -1, Optional ByVal Y As Long = -1, Optional ByVal Width As Long = -1, Optional ByVal Height As Long = -1, Optional Caption As String = " ", Optional Auto_Redraw As Boolean = False, Optional ByVal Back_Color As Long = -1)'使用-1作为默认值,并使用“”作为默认字符串。With WindowIf Caption <> " " Then .Caption = Caption '否则使用当前设置。 注意:一些'人们可能希望以“”作为标题。.AutoRedraw = Auto_Redraw.ScaleMode = 3If X <> -1 Then .Left = X '否则使用当前设置。If Y <> -1 Then .Top = Y '否则使用当前设置。If Width <> -1 Then .Width = Width * Screen.TwipsPerPixelX '否则使用当前设置。If Height <> -1 Then .Height = Height * Screen.TwipsPerPixelY '否则使用当前设置。If Back_Color <> -1 Then .BackColor = Back_Color '否则使用当前设置。.Show.Refresh.SetFocusEnd WithEnd Sub'使用此功能可以更轻松地设置具有所需信息的顶点。
Private Function Create_TLVertex(X As Single, Y As Single, Z As Single, RHW As Single, Color As Long, Specular As Long, TU As Single, TV As Single) As TLVERTEXCreate_TLVertex.X = XCreate_TLVertex.Y = YCreate_TLVertex.Z = ZCreate_TLVertex.RHW = RHWCreate_TLVertex.Color = ColorCreate_TLVertex.Specular = SpecularCreate_TLVertex.TU = TUCreate_TLVertex.TV = TVEnd FunctionPrivate Function DirectX_Initialize() As BooleanOn Error GoTo Error_HandlerDim Display_Mode As D3DDISPLAYMODE '显示模式说明。Dim Direct3D_Window As D3DPRESENT_PARAMETERS 'Backbuffer和视口说明。Set DirectX8 = New DirectX8 '创建DirectX对象。Set Direct3D = DirectX8.Direct3DCreate() '使用DirectX对象创建Direct3D对象Set Direct3DX = New D3DX8If Fullscreen_Enabled = True Then'“现在我们正在全屏模式下工作,我们必须设置'屏幕分辨率切换为,而不是使用默认屏幕'解析度。Display_Mode.Width = Fullscreen_WidthDisplay_Mode.Height = Fullscreen_HeightDisplay_Mode.Format = Color_DepthDirect3D_Window.Windowed = False '该应用程序将处于全屏模式。Direct3D_Window.BackBufferCount = 1 '仅1个后缓冲Direct3D_Window.BackBufferWidth = Display_Mode.Width '使后缓冲宽度与显示宽度匹配Direct3D_Window.BackBufferHeight = Display_Mode.Height '使后缓冲高度与显示高度匹配Direct3D_Window.hDeviceWindow = frmMain.hWnd '使用frmMain作为设备窗口。ElseDirect3D.GetAdapterDisplayMode D3DADAPTER_DEFAULT, Display_Mode '使用您当前使用的显示模式'已经在。 如果您感到困惑,我是'在谈论您当前的屏幕分辨率。 ;)Direct3D_Window.Windowed = True '该应用程序将处于窗口模式。End IfDirect3D_Window.SwapEffect = D3DSWAPEFFECT_COPY_VSYNC '监视器运行时刷新。Direct3D_Window.BackBufferFormat = Display_Mode.Format '设置检索到后缓冲区中的格式。'使用一些有用的信息以及信息创建渲染设备'我们已经设置了Direct3D_Window。Set Direct3D_Device = Direct3D.CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, frmMain.hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, Direct3D_Window)Direct3D_Device.SetVertexShader FVF_TLVERTEX '设置顶点着色的类型。 (需要)'设置alphablending的属性。Direct3D_Device.SetRenderState D3DRS_SRCBLEND, D3DBLEND_ONEDirect3D_Device.SetRenderState D3DRS_DESTBLEND, D3DBLEND_SRCALPHA'设置透明度属性。Direct3D_Device.SetRenderState D3DRS_ALPHAREF, 255Direct3D_Device.SetRenderState D3DRS_ALPHAFUNC, D3DCMP_GREATEREQUAL'不需要这些行,但能够过滤掉'使它们看起来更好的纹理。Direct3D_Device.SetTextureStageState 0, D3DTSS_MINFILTER, D3DTEXF_POINTDirect3D_Device.SetTextureStageState 0, D3DTSS_MAGFILTER, D3DTEXF_POINTExit FunctionError_Handler:MsgBox "初始化DirectX时发生错误!", vbCriticalDirectX_Initialize = FalseEnd FunctionPrivate Sub Load_Textures()Dim File_Path(10) As StringDim Width As LongDim Height As LongDim Transparency_Color As LongDim Current_Texture As LongReDim Texture(10) As Direct3DTexture8File_Path(0) = App.Path & "\Graphics\Sprite1.bmp"File_Path(1) = App.Path & "\Graphics\Sprite2.bmp"File_Path(2) = App.Path & "\Graphics\Sprite3.bmp"File_Path(3) = App.Path & "\Graphics\Sprite4.bmp"File_Path(4) = App.Path & "\Graphics\Sprite5.bmp"File_Path(5) = App.Path & "\Graphics\Sprite6.bmp"File_Path(6) = App.Path & "\Graphics\Sprite7.bmp"File_Path(7) = App.Path & "\Graphics\Sprite8.bmp"File_Path(8) = App.Path & "\Graphics\Sprite9.bmp"File_Path(9) = App.Path & "\Graphics\Sprite10.bmp"File_Path(10) = App.Path & "\Graphics\Sprite11.bmp"Width = 256Height = 256Transparency_Color = D3DColorRGBA(0, 0, 0, 255)For Current_Texture = 0 To 10Set Texture(Current_Texture) = Direct3DX.CreateTextureFromFileEx(Direct3D_Device, _File_Path(Current_Texture), _Width, Height, _0, _0, _D3DFMT_A8R8G8B8, _D3DPOOL_MANAGED, _D3DX_FILTER_POINT, _D3DX_FILTER_POINT, _Transparency_Color, _ByVal 0, _ByVal 0)Next Current_TextureEnd SubPrivate Sub Setup_Sprite()Sprite.Animation_State.Number_Of_Frames = 11Sprite.X = 130Sprite.Y = 90If Fullscreen_Enabled = False ThenScalar.X = 1Scalar.Y = 1ElseScalar.X = Fullscreen_Width / Window_WidthScalar.Y = Fullscreen_Height / Window_HeightEnd IfSprite.Animation_State.Speed = 0.2Sprite.Animation_State.Frame_Size.Left = 0Sprite.Animation_State.Frame_Size.Top = 0Sprite.Animation_State.Frame_Size.Right = 50Sprite.Animation_State.Frame_Size.Bottom = 50End SubPrivate Sub Animate_Sprite()Dim Current_Frame As SingleDim Transparency_Color As Long'就在这里将alphablend多边形Direct3D_Device.SetRenderState D3DRS_ALPHABLENDENABLE, False'就在这里将赋予多边形透明度Direct3D_Device.SetRenderState D3DRS_ALPHATESTENABLE, TrueIf Int(Sprite.Animation_State.Current_Frame) > (Sprite.Animation_State.Number_Of_Frames - 1) ThenSprite.Animation_State.Current_Frame = 0End IfCurrent_Frame = Int(Sprite.Animation_State.Current_Frame)Transparency_Color = D3DColorRGBA(255, 255, 255, 255)Frame.Left = (Sprite.X + Sprite.Animation_State.Frame_Size.Left) * Scalar.XFrame.Top = (Sprite.Y + Sprite.Animation_State.Frame_Size.Top) * Scalar.YFrame.Right = (Sprite.X + Sprite.Animation_State.Frame_Size.Right) * Scalar.XFrame.Bottom = (Sprite.Y + Sprite.Animation_State.Frame_Size.Bottom) * Scalar.Y'创建多边形。'---------------------------------------------------------------With FrameVertex_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.SpeedEnd SubPrivate Sub Game_Loop()Do While Running = TrueDoEvents '允许事件发生,以便程序不会锁定。'----------------------------------------------------'DirectX会自动为您处理帧速率'这使其运行(最多)与监视器一样快
'         刷新率高,因此您无需在其中添加额外的代码
'         降低循环速度并以一定数量的帧运行'每秒。'----------------------------------------------------'清除后缓冲。Direct3D_Device.Clear 0, ByVal 0, D3DCLEAR_TARGET, D3DColorRGBA(0, 0, 0, 0), 1#, 0Direct3D_Device.BeginSceneAnimate_Sprite'绘制多边形Direct3D_Device.DrawPrimitiveUP D3DPT_TRIANGLESTRIP, 2, Vertex_List(0), Len(Vertex_List(0))Direct3D_Device.EndScene'将后缓冲区翻转到窗体窗口中。Direct3D_Device.Present ByVal 0, ByVal 0, 0, ByVal 0LoopEnd SubPrivate Sub Close_Program()
Running = False '这有助于程序退出游戏循环。'卸载所有DirectX对象。Set Direct3D_Device = NothingSet Direct3D = NothingSet DirectX8 = NothingUnload Me '卸载窗体End ''结束程序'尽管上方的Unload语句退出了程序,但是您'这样做后将导致自动化错误?'END 命令 将有助于防止这种情况,并彻底结束该应用程序。End SubPrivate Sub Form_Activate()Window_Width = 320Window_Height = 240Fullscreen_Width = 640Fullscreen_Height = 480Color_Depth = COLOR_DEPTH_32_BITWindow_Setup frmMain, -1, -1, Window_Width, Window_Height, "DirectX Tutorial", , RGB(0, 0, 0)DirectX_Initialize '初始化DirectX和Direct3D。Load_Textures '从文件加载纹理。Setup_SpriteRunning = True '全部初始化。 现在可以激活游戏循环了Game_LoopEnd SubPrivate Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)If KeyCode = vbKeyEscape Then '如果用户按Esc键则退出程序Close_ProgramEnd IfEnd SubPrivate Sub Form_Load()'窗口完全加载之前将触发此事件。If MsgBox("单击“是”进入全屏(推荐)", vbQuestion Or vbYesNo, "选项") = vbYes Then Fullscreen_Enabled = TrueEnd SubPrivate Sub Form_Unload(Cancel As Integer)Close_ProgramEnd Sub

VB6编程:DirectX 2D图形学习日志22创建卡通动画相关推荐

  1. VB6编程:DirectX 2D图形学习日志1创建一个全屏窗口

    2020/12/11:从今天开始学习DirectX 2D图形编程,从0基础开始,希望能坚持下去.有兴趣一起学习的小伙伴可以关注我,当我有一周以上的时间没有发文,请发帖给我鼓鼓劲,毕竟自学编程是一件很辛 ...

  2. VB6编程:DirectX 2D图形学习日志4:总结前3课

    VB6编程:DirectX 2D图形学习日志4:总结前1-3课 教程下载地址:https://download.csdn.net/download/gosub60/13696651 现在,我对源码中出 ...

  3. VB6编程:DirectX 2D图形学习日志20伽玛校正

    VB6编程:DirectX 2D图形学习日志20伽玛校正 教程下载地址:https://download.csdn.net/download/gosub60/13696651 作用:通过按↑和下方向键 ...

  4. Win32 OpenGL编程(4) 2D图形基础(颜色及坐标体系进阶知识)

    Win32 OpenGL 编程 (4) 2D 图形基础(颜色及坐标体系进阶知识) write by 九天雁翎 (JTianLing) -- blog.csdn.net/vagrxie 讨论新闻组及文件 ...

  5. C4D R19学习 案例一犀牛卡通动画之01模型建立

    C4D R19学习 案例一犀牛卡通动画 01 模型建立 1.稻草制作 (1) 立方体--细分曲面--调整立方体高度,完成一个小草粒的制作--按C键将其合并成一个图层,更改名字为草--启用轴心模式,将轴 ...

  6. 斯坦福UE4 + C++课程学习记录 22:击败动画

    目录 1. 判断存活 2. 添加击败动画 3. 禁用输入 这一节内容将会为角色添加是否存活的判定,并为其添加击败后的倒地动画. 1. 判断存活 在之前第13节实现血量条时,我们创建了一个Attribu ...

  7. Win32 OpenGL编程系列 2D例子 -- 七巧板图形绘制

    write by 九天雁翎(JTianLing) -- blog.csdn.net/vagrxie 讨论新闻组及文件 OpenGL系列文章都已经写到3D部分了,但是感觉2D的例子还是少了点,特意弄个外 ...

  8. Django学习日志三:模型层

    Django学习日志三:模型层1 日志一我们学习了Django的配置,详见: Django学习日志一Django的配置 日志二我们学习了创建第一个django项目,详见: Django学习日志二--创 ...

  9. DX9绘图基础-------VB6编程学习DX9游戏编程DirectX9编程2D小游戏源码冷风引擎CoolWind2D游戏引擎(7)

    ** 绘图基础 ** 一:清除后备缓冲区 在度娘搜索 "DX9绘图"或者"DirectX9绘图",出来的东西不少,几乎找不到VB6的!还有会出来一个机器人,也叫 ...

最新文章

  1. 保存ip地址和计算机名称,批量设置IP地址和计算机名
  2. linux系统文件查找实验报告,Linux 文件查找与打包
  3. 简单几步让你实现本地jar包引入到maven当中
  4. 看完性能简报,想不优化好都难!
  5. git merge 步骤
  6. mac合上盖子不锁屏_macbook合上盖子不断网的设置
  7. Javascript url 小逻辑
  8. Javascript特效:距离某个时间倒计时
  9. Spark 按key聚合求平均值与占比
  10. Excel在spring cloud项目中乱码
  11. 深度学习 | MATLAB卷积神经网络原理描述
  12. STM32F1(Cortex M3内核)存储器映射
  13. 瑞芯微RK3288处理器性能,RK3288芯片参数介绍
  14. 解码百度大脑“一叶红船见百年”AR互动:见证勇立潮头的“中国AI”
  15. js替换关键词为链接,只替换一次,要避开超链接或图片
  16. 协议篇————7、HTTP协议详解
  17. pdf数据脱敏 如何恢复_不小心删除了磁盘分区,如何将数据恢复?
  18. 区块链 — 默克尔树
  19. python抓取网站访客手机号_电商 生意参谋 抓取 访客数据 Python版
  20. linux查看内存条pn,实验:使用GDB查看结构体在内存中的存储方式

热门文章

  1. 收藏 一文熟悉视频目标跟踪技术
  2. keras中的Merge层(实现层的相加、相减、相乘)
  3. 细节值得一提、性能可见一斑------大神F1极速版试用记
  4. springboot集成ribbon
  5. 目标检测作业及阶段总结
  6. 近期骗局频发,我们该如何保证自己的数字资产安全?
  7. 什么是MTTF\MTBF\MTRF
  8. sql里用union all 连接后,查询结果中带“_u1.”解决方法
  9. 计算机的性能指标概念,cpu性能指标有哪些及其概念是什么
  10. com.alibaba.dubbo.remoting.TimeoutException异常的解决方法