关键字: 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)
|