二、第一个DirectDraw实例
要使用DirectDraw,首先必须创建DirectDraw对象的一个实例来表征计算机上的显示适配卡,然后使用接口方法来处理对象。另外还需要创建一个或多个DirectDrawSurface对象的实例来显示游戏。DDEX1首先创建一个DirectDraw对象,再创建一个主表面(primary surface)和一个后台缓冲区(back buffer),然后在表面之间转换。DDEXx例子都是用C++写成的,如果你使用的是C编译器,必须将代码做适当改动,至少要加入虚表和指向接口方法的指针。
1、首先初始化DirectDraw对象
DDEX1 程序在doInit函数包含了DirectDraw 的初始化代码:
// 创建主DirectDraw 对象
ddrval = DirectDrawCreate( NULL, &lpDD, NULL );
if( ddrval == DD_OK )
{
// 获取独占模式
ddrval = lpDD->SetCooperativeLevel( hwnd, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN );
if(ddrval == DD_OK )
{
ddrval = lpDD->SetDisplayMode( 640, 480, 8 );
if( ddrval == DD_OK )
{
//创建带有一个后台缓冲区的主表面
ddsd.dwSize = sizeof( ddsd );
ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE |
DDSCAPS_FLIP |
DDSCAPS_COMPLEX;
ddsd.dwBackBufferCount = 1;
ddrval = lpDD->CreateSurface( &ddsd, &lpDDSPrimary, NULL );
if( ddrval == DD_OK )
{
//获取后台缓冲区的指针
ddscaps.dwCaps = DDSCAPS_BACKBUFFER;
ddrval=lpDDSPrimary->GetAttachedSurface(&ddscaps, &lpDDSBack);
if( ddrval == DD_OK )
{
// 画出一些文本
if (lpDDSPrimary->GetDC(&hdc) == DD_OK) {
SetBkColor( hdc, RGB( 0, 0, 255 ) );
SetTextColor( hdc, RGB( 255, 255, 0 ) );
TextOut( hdc, 0, 0, szFrontMsg, lstrlen(szFrontMsg) );
lpDDSPrimary->ReleaseDC(hdc);
}
if (lpDDSBack->GetDC(&hdc) == DD_OK) {
SetBkColor( hdc, RGB( 0, 0, 255 ) );
SetTextColor( hdc, RGB( 255, 255, 0 ) );
TextOut( hdc, 0, 0, szBackMsg, lstrlen(szBackMsg) );
&nb

这篇博客介绍了DirectX5游戏编程的基础,包括如何创建DirectDraw对象、设置显示模式、创建主表面和后台缓冲区,以及如何在DirectDrawSurface上着色和翻转表面。通过实例讲解了如何使用DirectDrawCreate、SetCooperativeLevel、SetDisplayMode等方法,以及如何处理DirectDrawSurface的DC和释放DirectDraw对象。
最低0.47元/天 解锁文章
4085

被折叠的 条评论
为什么被折叠?



