http://weilams.blogbus.com/logs/1115463.html
DirectX7.0使用心得(1)
DirectX 7.0终於支援VB了,让我们这些VB的爱好者也能享受到DirectX带来的便利,现在我在这里提出使用DirectDraw的心得。使用DirectDraw时可以不用安装DirectX7.0的SDK,只要确定有装DirectX7.0就可以了。
现在我们实际来使用DirectDraw:
在“工程(Project)”里点选“设定引用项目”,来引用DirectX物件。
接著将“DirectX 7 for Visual Basic Type Library”的那一行打勾,就可以开始使用DirectX了。
我们首先得建立DirectDraw物件,先宣告一个Direct物件和一个DirectDraw物件:
Dim objDX As New DirectX7
Dim objDD As DirectDraw7
接下来是使用DirectDrawCreate函式来建立DirectDraw物件:
Set objDD = objDX.DirectDrawCreate("")
然后必须设定是视窗模式还是全屏幕模式:
Call objDD.SetCooperativeLevel(Me.hWnd, DDSCL_FULLSCREEN Or DDSCL_ALLOWMODEX Or DDSCL_EXCLUSIVE)第一个参数是设定DirectDraw的视窗是那一个,填入视窗的Handle代码而后面的参数是设定具备的能力,可以不止一个,使用Or组合起来。
DDSCL_FULLSCREEN 使用全屏幕(必须和DDSCL_EXCLUSIVE一起用)
DDSCL_ALLOWMODEX 使用Modex模式
DDSCL_EXCLUSIVE 使用独占模式
DDSCL_NORMAL 使用Windows的程式视窗
DDSCL_NOWINDOWCHANGES 禁止改变视窗大小
---------------
设定完视窗模式或全屏幕模式后,如果你是设定成全屏幕模式的话(也就是独占模式),接著就必须设定显示模式。
objDD.SetDisplayMode 640, 480, 16, 0, DDSDM_DEFAULT
参数中的640,480指的是640x480的模式,而16指的是16万色,如果是8的话则是256色,想改变显示模式的话只要改变这三个变数就可以了,一般常用的模式有:
320x200 16万
320x240 256
640x480 256
640x480 16万
Surface简介:
Surface就是DirectDraw用的显示记忆体,图像就是要画在Surface上面,一般来说有分成几种类型。
primary surface 屏幕上可以看到的显示记忆体,图像画在上面就能显示在屏幕上。
backbuffer surface 这是一个能跟primary surface作快速切换的Surface。
offscreen surface 这是一个屏幕上看不见的Surface,可以用来存放图像。
我们现在就先来介绍建立primary surface的方法,首先得宣告一个Surface物件和一个DDSURFACEDESC结构。
Dim objDDPrimSurf As DirectDrawSurface7
Dim ddsd1 As DDSURFACEDESC2
'DDSURFACEDESC主要是记录一个Surface的结构,像是Surface的高度、宽度之类的,建立一个primary surface通常只要填入ddsCaps就可以了。
ddsd1.lFlags = DDSD_CAPS '设定DDSURFACEDESC结构中的ddsCaps有效。
ddsd1.ddsCaps.lCaps = DDSCAPS_PRIMARYSURFACE '设定要建立的是primary suface。
Set objDDPrimSurf = objDD.CreateSurface(ddsd1) '呼叫CreateSurface后即建立完成。
'offscreen surface的建立法则是要设定DDSURFACEDESC结构中的ddsCaps、dwHeight、dwWidth。
Dim objDDOffSurf As DirectDrawSurface7
Dim ddsd1 As DDSURFACEDESC2
ddsd1.lFlags = DDSD_CAPS Or DDSD_HEIGHT Or DDSD_WIDTH
'设定ddsCaps、lHeight、lWidth有效
ddsd1.ddsCaps.lCaps = DDSCAPS_OFFSCREENPLAIN '设定要建立offscreen surface
ddsd1.lWidth = 640 '设定Surface的宽度
ddsd1.lHeight = 480 '设定Surface的长度
Set objDDOffSurf = objDD.CreateSurfaceFromFile("img1.bmp", ddsd1)
'offscreen surface建立完成并把img.bmp图档读取到offscreen surface里面。
一般来说不会直接在primary surface上直接画图,我通常都是先在backbuffer surface上画,再利用切换的功能将Primary surface和backbuffer surface交换,所以在这里介绍backbuffer surface的建立方法,由於要跟primary surface一起建立,所以Primary surface的建立方法也就有点不同。
Dim objDDPrimSurf As DirectDrawSurface7
Dim objDDBackSurf As DirectDrawSurface7
Dim ddsd1 As DDSURFACEDESC2
ddsd1.lFlags = DDSD_CAPS Or DDSD_BACKBUFFERCOUNT
'设定ddsCaps和lBackBufferCount有效
ddsd1.lBackBufferCount = 1 '设定Backbuffer surface的数量
ddsd1.ddsCaps.lCaps = DDSCAPS_PRIMARYSURFACE Or DDSCAPS_FLIP Or DDSCAPS_COMPLEX
'设定要建立一个由primary surface和backbuffer surface 所构成的Surface
Set objDDPrimSurf = objDD.CreateSurface(ddsd1) 'primary surface建立完成
Dim caps As DDSCAPS2 宣告一个DDSCAPS结构
caps.lCaps = DDSCAPS_BACKBUFFER 设定要建立backbuffer surface
Set objDDBackSurf = objDDPrimSurf.GetAttachedSurface(caps) backbuffer suface 建立完成
Surface的部分讲完了,下一篇要说的是如何使用Blt和BltFast来作Surface间的图形的复制和搬移,就可以开始在Surface上画画罗。
---------------
上一次我们一共建立了三个Surface,分别是objDDPrimSurf(Primary surface)、objDDBackSurf(BackBuffer surface)、objDDOffSurf(Offscreen surface)。
现在我打算把objDDOffSurf拿来存放图片,再用BltFast()把图片给复制到objDDBackSurf上,然后用objDDPrimSurf的Flip来跟objDDBackSurf作交换的动作,因为objDDPrimSurf代表的就是显示记忆体,所以交换后图片就显示在屏幕上啦!
现在我先介绍BltFast()的用法:
BltFast(dx As Long,dy As Long,dds As DirectDrawSurface7,srcRect As RECT,trans As CONST_DDBLTFASTFLAGS) As Long
dx、dy
图形复制到目标Surface上的位置(座标)
dds
图片来源的Surface
srcRect
复制图形的范围
trans
复制图片的方式
DDBLTFAST_DESTCOLORKEY '使用目标Surface上的透明色
DDBLTFAST_NOCOLORKEY '直接复制图形
DDBLTFAST_SRCCOLORKEY '使用来源Surface上的透明色
DDBLTFAST_WAIT '若暂时无法执行的话就等到可以执行时
例:想把objDDOffSurf上640x480的图形复制到objDDBackSurf
Dim r1 As RECT
r1.left=0
r1.top=0
r1.right=640
r1.bottom=480
objDDBackSurf 0, 0, objDDOffSurf, r1, DDBLTFAST_WAIT
这样就把图形给复制到了objDDBackSurf上了,不过这样也只是在objDDBackSurf上而已,并不是在屏幕上,所以必须跟objDDPrimSurf作Flip才行,怎堋作呢?只要执行下面这一行就可以了:
objDDPrim.Flip Nothing, DDFLIP_WAIT
分享到:
相关推荐
### 精彩编程与编程技巧:DirectX7.0使用心得 在计算机图形学领域,DirectX一直是不可或缺的一部分,尤其是对于游戏开发人员而言。DirectX7.0作为早期版本之一,虽然现在已经不是最新的技术标准,但对于理解DirectX...
### 直接编程技巧:DirectX 7.0 使用心得详解 #### 一、DirectX 7.0 概述 DirectX 7.0 是 Microsoft 推出的一款用于 Windows 平台上的多媒体编程接口,它包括了一系列 API,用于简化游戏和其他多媒体软件的开发...
### DirectX 7.0 使用心得:Surface管理与BltFast方法详解 #### Surface概念解析 在DirectX 7.0编程中,Surface是用于表示屏幕图像的基本单元,包括主表面(Primary Surface)、后缓冲表面(Back Buffer Surface)...
在这个压缩包中包含的是DirectX 7.0a的头文件(.h)和库文件(.lib),它们是开发者在使用DirectX 7.0a编程时需要引用的关键组件。 头文件(.h)通常包含了函数声明、结构体定义和其他编程元素,供编译器在编译源...
DirectX 7.0 SDK(Software Development Kit)是微软为开发者提供的一套工具和库,主要用于创建使用DirectX技术的游戏和多媒体应用程序。这套SDK包含了开发DirectX 7.0应用程序所需的头文件、库文件、文档、示例代码...
DirectX7.0,英文版,用于Windows95.
DirectX 7.0 SDK 含有三个压缩包 要下载全了一起压缩 希望大家可以认真评价 如有不足之处-我会及时更新增加新的资料
已经是非常精简的版本了
DirectX 7.0 SDK 含有三个压缩包 要下载全了一起压缩 希望大家可以认真评价 如有不足之处-我会及时更新增加新的资料
《Delphi Graphics And Game Programming With Directx 7.0》这本书是专为Delphi开发者设计的一本技术指南,深入探讨了如何使用DirectX 7.0进行图形和游戏编程。DirectX是由微软开发的一组应用程序接口(API),主要...
最近在看《Windows游戏编程大师技巧(第二版)》,其中...由于DirectX用的是COM技术,如果您使用的是高版本的DirectX,那么不用去下载DirectX7.0,使用现有版本就可以。需要了解函数信息時,查看一下这个文档就可以。
DirectX 7.0是微软开发的一套用于Windows操作系统中的多媒体编程接口,它极大地促进了图形、音频和输入设备在游戏和应用程序中的性能。NVIDIA作为知名的显卡制造商,其产品线广泛支持DirectX 7.0,以提供卓越的3D...
对于那些使用Windows 95、98或ME的老机器来说,DirectX 7.0是一个必要的升级,因为许多当时流行的游戏都需要这个版本或更高版本的DirectX才能运行。文件名DX70eng.exe就是DirectX 7.0英文版的安装程序。 安装...
### 使用VB编写DirectX7.0游戏:关键技术与实践 #### 一、DirectX7.0 SDK安装与配置 在开始使用Visual Basic (VB) 开发DirectX7.0游戏之前,首先需要安装DirectX7.0的SDK(Software Development Kit)。DirectX7.0...
DirectX 7.0,简称DX7,是微软推出的一款重要的图形和多媒体编程接口,它在1998年发布,主要用于Windows 98等早期操作系统。DirectX是一系列技术的集合,旨在提供游戏和多媒体应用程序所需的高性能硬件加速功能。这...
在本例中,“Directx7.0台球游戏”是一款利用DirectX 7.0技术实现的台球小游戏,它展示了DirectX在游戏开发中的应用。 1. **DirectX 7.0基础知识**: - **DirectDraw**:负责2D和3D图形渲染,包括硬件加速功能,能...
### 使用VB编写DirectX7.0游戏:精彩编程与编程技巧 #### 一、DirectX7.0简介 DirectX7.0是微软推出的一款针对多媒体应用开发的强大工具包,相较于之前的版本DirectX6,DirectX7进行了大幅度的升级与改进。在...
DirectX 7.0是微软开发的一套用于Windows平台的游戏和多媒体编程接口,它提供了丰富的图形处理能力,包括2D和3D图形渲染、音频处理等功能。在本教程中,我们将探讨如何利用DirectX 7.0来实现图像的全屏显示。 全屏...