转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> VB.NET程序 >> 正文
VB.NET实现DirectDraw9 (2) 动画         ★★★★

VB.NET实现DirectDraw9 (2) 动画

作者:闵涛 文章来源:闵涛的学习笔记 点击数:3148 更新时间:2009/4/23 19:00:44
关键字: VB.NET  DirectX DirectDraw 9                                    作者:董含君
转载请注明来自 http://blog.csdn.net/a11s

===========日记================
发现最近比较懒惰,代码稍微长那么一点,就不想看了.还是看书比较好.
考虑做游戏,但是目前所学的知识还不够.革命尚未成功,同志们仍需努力啊
===========End 日记=============

今天是完成全屏幕动画,1024x768,外加多层绘制(鼠标位置就不值得一提了)

先回想一下我们平时是怎样画图的.(应该是做图)
1 准备一张纸,这个要给别人看的 (PrimarySurface)        
2 一支笔   (Draw方法)
然后自由发挥就可以了 (找坐标,画..)

这样是可以的,你的观众(坐在显示器前面的人)不但能看见你的绘制的作品,而且连你如何绘制的都能看见(也许你正在用描点法画图...). 很明显,我们不希望观众看见我们绘图时的“优雅姿态“.我们要的是速度以及效果,这么慢就不叫DirectDraw了

方案2
1 准备一张纸,这个是给观众欣赏的(PrimarySurface)
2 再准备一个成型的作品,比如达芬奇画过的鸡蛋 (Surface)
3 画笔,尖刀,胶水
大概你知道我要做什么了吧,用粘贴的办法自然要快于描点.但是,观众们依然可以知道你是粘贴上去的!当演示一幅一幅的动画的时候,往往会粘贴的到处都是.....

方案3
1 找个工作台,请观众坐下慢慢看当前的图像(PrimarySurface)
2 自己再另外找一张或者更多的画板 (BackSurface)
3 各种工具,只要能方便使用就好 (DrawFast DrawRect DrawText DrawCircle .....)
4 请一位助手帮忙更换工作台的作品.(PrimarySurface.flip)
这样您可以解放出来,再也不用担心您的观众看到您绘制的过程了.虽然他们可以“猜测“您是如何绘制的.我们这样做,在backSurface上面用任意的快速方法做图,当然可以从其他Surface上面复制,然后粘贴到BackSurface,提交给PrimarySurface,让他Flip,用户看到的就是您绘制完之后的结果(PrimarySurface),当观众对您的作品赞不绝口的时候,您正在刚才flip之后的画板上修改,然后把修改之后的这个画板再flip...

这样,两张画板解决了问题.同时只有1个是观众正在看的,另外1个是您手头上正在画的,您的助手(PrimarySurface)很聪明,不会搞错,所以你只要安心画当前的画板(BackBuffer)就够了

强调一下,您绘制的总是Backbuffer,flip方法会把您的backbuffer呈现到PrimaryBuffer,然后绘制,呈现,绘制,呈现...
或者您理解为复制到PrimarySurface也可(实际上是内存的块移动)

大体步骤跟前文说得一致,仅仅是多生命了几个Surface用于复制,源代码不过才200行,主要代码也就不到100行,里面有比较详细的注释.所以再这里就没有必要解释了

==================================================

Imports Microsoft.DirectX.DirectDraw

 

Public Class Form1

    Inherits System.Windows.Forms.Form

    Private Structure PointAPI

        Public x As Integer

        Public y As Integer

    End Structure

    ''''''''''''API用习惯了....也就继续用吧...

    Private Declare Function GetCursorPos Lib "user32" (ByRef lpPoint As PointAPI) As Integer

 

    Dim dev As New Device(CreateFlags.Default)

 

    Dim PS As Surface           ''''primarySurface

    Dim BS As Surface           ''''BackSurface

    Dim S1 As Surface           ''''Surface1  用于储存图像的,想象成一个BMP就行了

    Dim S2 As Surface           ''''Surface2  同上

    ''''''''''''分别对应上面的四个Surface

    Dim desc1 As SurfaceDescription

    Dim desc2 As SurfaceDescription

    Dim desc3 As SurfaceDescription

    Dim desc4 As SurfaceDescription

    ''''''''分别对应上面的Surface

    Dim RP As Rectangle

    Dim RB As Rectangle

    Dim R1 As Rectangle

    Dim R2 As Rectangle

 

    ''''''''''''计时器相关

    Dim tLast As TimeSpan

    Dim fps As String

    Dim tfp As Integer = 0

    Dim mytime As Date = DateTime.Now

    Dim ts As New TimeSpan

    Dim qiqi As Double

    ''''''''''''游戏控制

    Dim running As Boolean = False

    Dim TT As Threading.Thread

    ''''''''''''鼠标位置

    Dim M As PointAPI

    ''''''''''''需要读取的图像

    Const FN1 = "d:\nerv.bmp"

    Const FN2 = "d:\logo.bmp"

 

 

#Region " Windows 窗体设计器生成的代码 "

 

    Public Sub New()

        MyBase.New()

[1] [2] [3] [4] [5]  下一页


[操作系统]Windows2000/XP/2003操作系统常见问题集锦下篇  [操作系统]Windows2000/XP/2003操作系统常见问题集锦上篇
[操作系统]WinXP/2000操作系统自动关机的实现  [操作系统]过河不拆桥—切勿忘记OS/2第二代操作系统之下篇
[操作系统]过河不拆桥—切勿忘记OS/2第二代操作系统之上篇  [系统软件]Visual Studio 2005 Express Editions Beta 2 下载…
[常用软件]IE 7出炉,Firefox 2当道.谁才是“王者”?  [常用软件]豪华的冲浪引擎MSN Explorer (2)
[VB.NET程序]VB.NET实现DirectDraw9 (1) 托管的DDraw  [VB.NET程序]学习笔记,VB.NET使用DirectSound9 (2)
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台