打印本文 打印本文 关闭窗口 关闭窗口
VB.NET实现DirectDraw9 (1) 托管的DDraw
作者:武汉SEO闵涛  文章来源:敏韬网  点击数4137  更新时间:2009/4/23 19:00:43  文章录入:mintao  责任编辑:mintao

关键字: 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]  下一页

打印本文 打印本文 关闭窗口 关闭窗口