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

VB.NET实现DirectDraw9 (1) 托管的DDraw

作者:闵涛 文章来源:闵涛的学习笔记 点击数:4110 更新时间:2009/4/23 19:00:43

关键字: VB.NET DirectX DirectDraw 9                             作者:董含君
转载请注明来自: http://blog.csdn.net/a11s

================以下为废话(记日记是好习惯)===============
本来应该继续DirectSound 混音的,但是今天由于时间关系,完不成任务了.

发现国外的一个站点,里面的人比较牛X 直接自己用binaryreader读取wav

自愧不如啊~~~

================End 废话===============================

很多人都认为DirectDraw在DirectX7时代就终结了,到了VB.NET以及托管的DirectX

微软要继承旧的DirectDraw,又要托管.所以DDraw毕竟是有变化的.

现在拾起来.有点不适应.但是基本概念还是不会变化的.

国内高手对此不屑,而且还有人会了3D后敌视2D,我就不发表评论了,倒是让我有了填补国内空白的机会了

首先说大体过程.我的学习笔记比较基础,不是为了体现DDraw的性能,而是理清步骤(微软的例子就麻烦4了)

0 工程添加DirectDraw的引用,代码里面imports Microsoft.DirectX.DirectDraw

1 创建Device 设置合作级别 (只要是DirectX 都要这样)

2 创建描述 (为了创建Surface做准备,跟DirectSound创建Buffer的描述一个道理)

3 利用描述创建主缓冲以及二级缓冲(就是BackSurface)

4 为主缓冲指定一个Clipper

=============加载完成==================

绘制过程比较简单,你可以使用Timer设置时间间隔.但是一般人不会这么作,虽然实现过程简单.

为了体现平滑的动画,往往CPU能用就用,FPS越高越好(其实太高了也没用,但是当动画复杂的时候就有用了)

以下是参考大风给我的计时器.

        Dim tfp As Integer = 0                                      ''''''''''''fps

        Dim mytime As Date = DateTime.Now                           ''''''''''''临时用一下

        While (run = True)                                          ''''''''''''如果游戏没有结束

            blt()                                                   ''''''''''''主要绘制过程

            tfp += 1                                                ''''''''''''fps++

            If tfp = 200 Then                                       ''''''''''''200次的时候计算时间

                tfp = 0

                Dim ts As New TimeSpan

                ts = (DateTime.Now.Subtract(mytime))

                mytime = DateTime.Now

                If ts.TotalSeconds <> 0 Then

                    Dim qiqi As Double = 200 / (ts.TotalSeconds)

                    Me.Text = qiqi.ToString("##.##") + "F c"

                End If

 

            End If

 

            TT.Sleep(20)                                            ''''''''''''硬性规定休息一下,当然可以去掉发挥MAX速度

        End While

需要知道,里面的变量都是临时定义的,如果你对速度很在意,这样做是不可取的,但是为了理解方便,所以才这么作,进行优化的时候就要拿出来了.

有了计数器,用它建立了游戏循环.循环自己管理主要的blt()过程,blt也很简单

    Sub blt()

 

        If PS Is Nothing Then Exit Sub

        Dim r1 As Rectangle

        Dim r2 As Rectangle

        r2.Height = desc2.Height

        r2.Width = desc2.Width

        r1.Height = P.Size.Height

        r1.X = 0

        r1.Y = 0

        r1.Width = P.Size.Width

        PS.Draw(r1, BS, r2, DrawFlags.Wait)

 

    End Sub

就是设置好矩形区域然后绘制,这里不再是DDraw7的RECT了,里面多少有些变化.

调用游戏循环很简单,直接main2就可以,但是不可取,这样做会让你的程序”卡死”,导致程序没有响应

需要新开一个线程处理这件事情

    Private Sub Label

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


[学习帮助]已知直线Y=-x+1 交X,Y 轴于A,B  [办公软件]如何在Excel表格单元格中输入比例(如4:1并让其正确…
[常用软件]休息一下!网络资源搜罗 (1)  [VB.NET程序]VB6升级到VB.NET(1)  App的变化
[VB.NET程序]VB.NET实现DirectDraw9 (2) 动画  [VB.NET程序]学习笔记,VB.NET使用DirectSound9 (1)
[VB.NET程序]Visual Basic 6 逆向工程与反逆向工程 (1)  [VB.NET程序]几个 WMI 的例子(初级) - 1
[VB.NET程序]VBCOM TUTORIAL(1)  [VB.NET程序]Common Control - The VB Way (1)
教程录入: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……
    咸宁网络警察报警平台