DirectXGuide入门(下)
2008-04-09 04:08:36来源:互联网 阅读 ()
这一节要教你如何将位图画到buffer上去。前面介绍过Front buffer和Back buffer这两种buffer大小与你初始化的分辨率是一样的,还有一种buffer可以为任意大小,称为Off screen buffer,我们可以将位图预先读到这样的Off screen buffer中,然后在用到时直接将它Blit到Back buffer,Blit意为位图的块传送。DXGuide中的CDDDIBSurface类就是专门用于处理位图的,下面我们来看看CDDDIBSurface的基本用法,仍是利用例一中的工程。
在DDTestApp.h中加入行
#include "DDDIBSurface.h"
利用ClassWizard在CDDTestApp中添加一个成员变量
CDDDIBSurface *m_pDib;
利用ClassWizard转到CDDTestApp::InitDXObjects(void)中,在行
// add your init code here !
后插入下列行
m_pDib = new CDDDIBSurface;
m_pDib-$#@62;Create(m_pDDDevice, "DXGuide.bmp");
转到CDDTestApp::UpdateFrame(void)中,在行
m_pDDDevice-$#@62;GetRenderSurface()-$#@62;Fill(0);
后插入下列行
CRect rect(0, 0, m_pDib-$#@62;GetWidth(), m_pDib-$#@62;GetHeight());
m_pDDDevice-$#@62;GetRenderSurface()-$#@62;Blt(rect, m_pDib, rect,
DDBLT_WAIT, NULL);
m_pDDDevice-$#@62;GetRenderSurface()-$#@62;BltFast(100, 100, m_pDib, rect,
DDBLTFAST_WAIT);
转到CDDTestApp::DestroyDXObjects(void)中,在行
// add your destroy code here !
后插入下行
delete m_pDib; m_pDib = NULL;
在DDTest目录下创建一个名为DXGuide.bmp
Blt和BltFast的用法参照SDK帮助中IDirectDrawSurface::Blt和IDirectDrawSurface::BltFast的用法。
注意:到这里必须将CDDTestApp.cpp的结构搞清楚,构造函数中的
m_dwAppInitFlags = CDirectXApp::DXAPPIF_DD;
| CDirectXApp::DXAPPIF_DI
| CDirectXApp::DXAPPIF_DS
| CDirectXApp::DXAPPIF_GUIMANAGER;
决定使用哪些DirectX部件,如你不想使用DirectInput,将CDirectXApp::DXAPPIF_DI拿掉就行了(注意:要使用GUIManager的话一定要使用DirectInput)。
CDDTestApp::GetDXInitSettings(void)是用于获取初始信息,如选取哪个设备来显示画面或播? 音。
CDDTestApp::InitDXObjects(void)用于初始化成员变量。
CDDTestApp::DestroyDXObjects(void)用于释放为成员变量申请的内存空间。
CDDTestApp::UpdateFrame(void)用于渲染页面。
你自己加入的成员变量的初始化和释放应该都放在InitDXObjects()和DestroyDXObjects()中完成。
4)将你的文件打包
为什么要将文件打包?首先是加快文件的读取速度,如果你有几十个甚至几千个文件放在同一个目录内,打开文件时文件查找是一种费时的操作,如果包装成一个大文件的话,不管你要读多少个文件,打开文件的操作只有一次;别外还有一种作用是让目录看起来整洁一些,打包后文件也不会那么直观,别人不会一目了然看出你的文件都是些什么。
记得前面的读位图语句吧?m_pDib-$#@62;Create(m_pDDDevice, "DXGuide.bmp"),CDDDIBSurface的Create可接受四个参数,第一个是CDDevice*,第二个是位图的文件名,第三个是CPackFileManager*,第四个是DIB文件类型。其中第三个参数CPackFileManager*指向的就是一个文件包,如果这项为NULL(缺省),则直接从当前目录中读位图文件,否则从文件包内读取位图。第四个参数用于告诉函数读取的DIB是位图(缺省)还是其它格式文件。
我们再回头看看CDDTest的构造函数中有一SetPackFileName(_T(""), _T("gui.ff"))语句,这是指定包文件名,第一个参数用于指定一般数据文件包的文件名,第二个参数是GUI相关数据文件包的文件名,如果指定的文件名是一个目录名,则此目录与文件包同等看待。
第一个文件名指定后,会生成一个CPackFileManager,指针放在成员变量m_pPackFileManager里。
所以我们把前一个例子中的位图打成包,放于文件包PackFile.ff中,且CDDTest 构造函数中的语句
SetPackFileName(_T(""), _T("gui.ff"))改成
SetPackFileName(_T("PackFile.ff"), _T("gui.ff")),函数
CDDTestApp::InitDXObjects(void)中的语句m_pDib-$#@62;Create(m_pDDDevice,
"DXGuide.bmp")改为m_pDib-$#@62;Create(m_pDDDevice, "DXGuide.bmp",
m_pPackFileManager)。再运行看看,是不是一样的?
本文出自天涯风铃
156标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:NTFS下隐藏颇深的文件存取格式
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash