使用DirectX让子图形移动(精灵动画)
这是我今天从这本书上学的,这本书的名字叫做《Beginning DirectX9》这本书是英文的。好在我还看得懂英文。书上给了很多DirectX编程的初学者怎样进行DirectX编程。今天我看到了Sprite(子图形,又叫精灵图形)这一章,这一章讲了怎样使用DirectX进行精灵图形的绘制。书上的内容还是比较通俗易懂的。但是有一个缺陷,就是没有那位高人有这本书的光碟。所以我们国内的读者只好看pdf文件了。我在研究这本书的时候好在有些基础,要不然在4个月前,我根本就不知道怎样对书上的错误进行更正。正如我上面所说,书还是有很多缺陷的。这就要我们读者进行更正喽。在今天一个多小时的努力和我的基本框架的基础上,我终于把书上要显示的效果实现了。下面就是我的代码,注释是我翻译和添加的,很好懂。如果还是不懂的话,可以单独地问我或是跟帖,我会耐心地回答大家的问题的。
首先是我的MainFrame.cpp文件。
- /*---------------------------------------------------------------------------
- 蒋轶民制作 E-mail:[email protected]
- 文件名:MainFrame.cpp
- 作用:载入子图像(sprite)
- ----------------------------------------------------------------------------*/
- /*--------------------------------------------------------------------------*/
- // 头文件
- #include<windows.h>
- #include<d3d9.h>
- #include<d3dx9.h>
- #include<stdio.h>
- // 库文件
- #pragma comment( lib, "d3d9.lib")
- #pragma comment( lib, "d3dx9.lib")
- // 定义的宏
- #define JCLASSNAME "优化的程序"
- #define JCAPTION "程序演示"
- #define WINDOW_WIDTH 640
- #define WINDOW_HEIGHT 480
- #define FULLSCREEN FALSE// 全屏与否的开关
- #define SAVE_RELEASE( p ) if ( p ) p->Release(); p = NULL;
- // 调整编译器设置
- #pragma warning( disable: 4100 )
- #if FULLSCREEN // 全屏与否的设置
- #define WINDOW_STYLE WS_EX_TOPMOST | WS_POPUP | WS_VISIBLE
- #else
- #define WINDOW_STYLE WS_CAPTION | WS_SYSMENU
- #endif
- /*----------------------------------------------------------------------------*/
- // 全局变量
- LPDIRECT3D9 g_JD3D = NULL;// D3D结构体
- LPDIRECT3DDEVICE9 g_JDevice = NULL;// D3D装置结构体
- LPD3DXFONT g_FPSFont = NULL;// 指向FPS字体的指针
- RECT g_FPSFontPos = { WINDOW_WIDTH - 100, WINDOW_HEIGHT - 15,
- WINDOW_WIDTH, WINDOW_HEIGHT};// FPS所在的矩形框
- INT g_FrameCount = 0;// 帧的计数器
- INT g_lastTime = 0;// 记录上一秒的时间
- INT g_currentTime = 0;// 记录当前的时间
- CHAR g_FPSstr[25] = { 0 };// 记录当前帧率的字符串 <