|
DirectX 7 编程初步(3) 其中参数hdl指定程序的窗口句柄,参数flag决定程序运行的方式,函数调用 Ddraw.SetCooperativeLevel Me.hWnd, DDSCL_NORMAL 将使程序运行于普通的协作层即窗口模式之下。在这种协作层你无法改变主平面调色板或进行页交换,因为程序可以使用多窗口。而函数调用 Ddraw.SetCooperativeLevel MainForm.hWnd, DDSCL_EXCLUSIVE Or DDSCL_FULLSCREEN 将使程序运行于全屏幕模式之下。在全屏幕协作模式之下你可以完全使用硬件的一切。在这个模式之下,你可以设置使用定义及动态调色板,改变显示分辨率及进行页交换。
用VB编写DirectX7.0游戏(下)(接上期)
2.3 设置显示模式 设置显示模式是使用SetDispalyMode函数实现的,函数的定义如下:
object.SetDisplayMode (w As Long, h As Long, bpp As Long, ref As Long, mode As CONST_DDSDMFLAGS)
其中参数w、h分别指定屏幕的宽度和高度,bpp指定屏幕显示的颜色位数,参数ref指定屏幕的刷新频率,设置为0使用显示驱动的缺省刷新频率,mode指定附加的参数。要获得系统支持的显示模式,可以使用DirectDraw对象的GetDisplayModesEnum函数来遍历所有支持的显示模式。
2.4 建立平面对象 一个平面或者说DirectDrawSurface对象是DirectDraw中图形显示和绘制对象。用户可以在DirectDrawSurface上贴位图、绘制图形,还可以直接操作DirectDrawSurface对象使用显存里的内容。利用DirectDraw对象的CreateSurface方法可以建立一个DirectDrawSurface7对象。例如:
Public DDSFrontDesc As DDSURFACEDESC2 With DDSFrontDesc .lFlags = DDSD_CAPS .ddsCaps.lCaps = DDSCAPS_PRIMARYSURFACE End With Set DDSFront = Ddraw.CreateSurface(DDSFrontDesc)
也可以利用DirectDraw对象的CreateSurfaceFromFile函数或者CreateSurfaceFromResource函数建立一个DirectDrawSurface7对象,同时将图像文件或者资源文件中的图像装入建立的DirectDrawSurface中。如果上面的函数调用成功,函数将返回一个DirectDrawSurface对象。如果在设定DirectDraw对象的协作层时将其设置为全屏幕模式的话,为了改善图像性能,可以设立一个主平面和若干个屏下缓冲平面,首先在屏下平面中生成图像,然后将图像翻转到主平面上,这样可以有效地避免图像闪烁。
下面通过一个具体的范例来对DirectDraw进行说明:这个范例建立一个全屏幕的DirectDraw对象,通过操作主显示平面的显示内存在屏幕上显示火焰字的特效,然后按Enter键可以将DirectDraw平面中的图形保存起来。程序的具体实现如下:
建立一个新的工程文件,点击菜单中的 Project Reference 选项,打开Object Library 列表窗口,将DirectX 7.0 For Visual Basic Type Library 加入工程文件。将Form1的Name属性改变为MainForm,在MainForm中加入一个PictureBox控件,将其的Visible属性设置为False。然后在MainForm的代码窗口中加入以下代码:
Private Sub Form_KeyPress(KeyAscii As Integer) Dim sRect As RECT Dim hdCSrc As Long If KeyAscii = 27 Then ExitLoop = True 'End ElseIf KeyAscii = vbKeyReturn Then DDSFront.BltToDC Picture1.hDC, sRect, sRect
|