📄 dxfunction.cpp
字号:
#include "RpgMain.h"
//---------------Main DDRAW Init------------------------------------
void InitDDS(void)
{
FreeDDraw();
DDBLTFX ddBltFx;
ddBltFx.dwSize=sizeof(DDBLTFX);
ddBltFx.dwFillColor=0;
DDReLoadBitmap(lpDDSHuman,"Human.bmp");
DDReLoadBitmap(lpDDSSprite,"Sprite.bmp");
DDReLoadBitmap(lpDDSMap,"Inn.bmp");
DDReLoadBitmap(lpDDSBox,"Box.bmp");
DDReLoadBitmap(lpDDSBar,"Bar.bmp");
DDReLoadBitmap(lpDDSThing,"Thing.bmp");
DDReLoadBitmap(lpDDSPanel,"panel.bmp");
DDReLoadBitmap(lpDDSMouse,"mouse.bmp");
MakeRect(0,0,640,480);
lpDDSPrimary->BltFast(0,0,lpDDSMap,&r,NoKey);
DDSetColorKey(lpDDSHuman,RGB(0,255,0));
DDSetColorKey(lpDDSSprite,RGB(0,255,0));
DDSetColorKey(lpDDSOver,RGB(0,255,0));
DDSetColorKey(lpDDSMouse,RGB(0,255,0));
DDSetColorKey(lpDDSBox,RGB(0,255,0));
DDSetColorKey(lpDDSBar,RGB(0,255,0));
DDSetColorKey(lpDDSThing,RGB(0,255,0));
DDSetColorKey(lpDDSPanel,RGB(0,255,0));
CleanOver();
// RefreshAll();
}
//---------------Basic DDRAW Functions------------------------------
BOOL InitDDraw(void)
{
DDSURFACEDESC ddsd;
if ( DirectDrawCreate( NULL, &lpDD, NULL ) != DD_OK )
return FALSE;
if ( lpDD->SetCooperativeLevel(hwnd,DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN)
!=DD_OK) return FALSE;
if ( lpDD->SetDisplayMode( 640, 480, 16 ) != DD_OK) return FALSE;
ddsd.dwSize = sizeof( ddsd );
ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_FLIP |DDSCAPS_COMPLEX;
ddsd.dwBackBufferCount = 1;
if ( lpDD->CreateSurface( &ddsd, &lpDDSPrimary, NULL ) != DD_OK)
return FALSE;
ddsd.ddsCaps.dwCaps = DDSCAPS_BACKBUFFER;
if ( DD_OK != lpDDSPrimary->GetAttachedSurface (&ddsd.ddsCaps, &lpDDSBuffer))
return FALSE;
ddsd.dwSize = sizeof( ddsd );
ddsd.dwFlags = DDSD_CAPS|DDSD_WIDTH|DDSD_HEIGHT;
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
ddsd.dwHeight=480;
ddsd.dwWidth=640;
if ( DD_OK != lpDD->CreateSurface( &ddsd, &lpDDSMap, NULL) )
return FALSE;
ddsd.dwHeight=800;
ddsd.dwWidth=160;
if ( DD_OK != lpDD->CreateSurface( &ddsd, &lpDDSHuman, NULL) )
return FALSE;
ddsd.dwHeight=128;
ddsd.dwWidth=320;
if ( DD_OK != lpDD->CreateSurface( &ddsd, &lpDDSSprite, NULL) )
return FALSE;
ddsd.dwHeight=480;
ddsd.dwWidth=640;
if ( DD_OK != lpDD->CreateSurface( &ddsd, &lpDDSOver, NULL) )
return FALSE;
ddsd.dwHeight=60;
ddsd.dwWidth=74;
if ( DD_OK != lpDD->CreateSurface( &ddsd, &lpDDSBox, NULL) )
return FALSE;
ddsd.dwHeight=100;
ddsd.dwWidth=40;
if ( DD_OK != lpDD->CreateSurface( &ddsd, &lpDDSBar, NULL) )
return FALSE;
ddsd.dwHeight=45;
ddsd.dwWidth=128;
if ( DD_OK != lpDD->CreateSurface( &ddsd, &lpDDSThing, NULL) )
return FALSE;
ddsd.dwHeight=131;
ddsd.dwWidth=461;
if ( DD_OK != lpDD->CreateSurface( &ddsd, &lpDDSPanel, NULL) )
return FALSE;
ddsd.dwHeight=26;
ddsd.dwWidth=32;
if ( DD_OK != lpDD->CreateSurface( &ddsd, &lpDDSMouse, NULL) )
return FALSE;
return TRUE;
}
HRESULT Restore(void)
{
HRESULT ddrval;
ddrval = lpDDSPrimary->Restore();
ddrval = lpDDSBuffer->Restore();
ddrval = lpDDSHuman->Restore();
ddrval = lpDDSMap->Restore();
ddrval = lpDDSSprite->Restore();
ddrval = lpDDSOver->Restore();
ddrval = lpDDSBox->Restore();
ddrval = lpDDSBar->Restore();
ddrval = lpDDSThing->Restore();
InitDDS();
return ddrval;
}
void FreeDDraw(void)
{
DDPIXELFORMAT ddpf;
ddpf.dwSize = sizeof(ddpf);
lpDDSBuffer->GetPixelFormat(&ddpf);
DDBLTFX ddBltFx;
ddBltFx.dwSize=sizeof(DDBLTFX);
ddBltFx.dwFillColor=(WORD)ddpf.dwGBitMask;
lpDDSPrimary ->Blt(NULL,NULL,NULL,DDBLT_WAIT|DDBLT_COLORFILL,&ddBltFx);
lpDDSBuffer->Blt(NULL,NULL,NULL,DDBLT_WAIT|DDBLT_COLORFILL,&ddBltFx);
lpDDSMap->Blt(NULL,NULL,NULL,DDBLT_WAIT|DDBLT_COLORFILL,&ddBltFx);
lpDDSHuman->Blt(NULL,NULL,NULL,DDBLT_WAIT|DDBLT_COLORFILL,&ddBltFx);
lpDDSSprite->Blt(NULL,NULL,NULL,DDBLT_WAIT|DDBLT_COLORFILL,&ddBltFx);
lpDDSOver->Blt(NULL,NULL,NULL,DDBLT_WAIT|DDBLT_COLORFILL,&ddBltFx);
lpDDSBox->Blt(NULL,NULL,NULL,DDBLT_WAIT|DDBLT_COLORFILL,&ddBltFx);
lpDDSBar->Blt(NULL,NULL,NULL,DDBLT_WAIT|DDBLT_COLORFILL,&ddBltFx);
lpDDSThing->Blt(NULL,NULL,NULL,DDBLT_WAIT|DDBLT_COLORFILL,&ddBltFx);
}
void Flip()
{
HRESULT ddrval;
ddrval=lpDDSPrimary->Flip(NULL,DDFLIP_WAIT);
if (ddrval==DDERR_SURFACELOST)
Restore();
}
void MakeItSame()
{
MakeRect(0,0,640,480);
lpDDSBuffer->BltFast(0,0,lpDDSPrimary,&r,NoKey);
}
void CleanRect(LPDIRECTDRAWSURFACE lpDDS)
{
DDPIXELFORMAT ddpf;
ddpf.dwSize = sizeof(ddpf);
lpDDSBuffer->GetPixelFormat(&ddpf);
DDBLTFX ddBltFx;
ddBltFx.dwSize=sizeof(DDBLTFX);
ddBltFx.dwFillColor=(WORD)ddpf.dwGBitMask;
lpDDS->Blt(&r,NULL,&r,DDBLT_WAIT|DDBLT_COLORFILL,&ddBltFx);
}
//---------------Over Surface Functions----------------------------
void CleanOver()
{
MakeRect(0,0,640,480);
CleanRect(lpDDSOver);
Print("RPG DEMO 0.090 Build 0225 By Kane_Peng",10,10);
Print("http://go.163.com/~kanepeng",10,30);
MakeRect(0,0,461,131);
lpDDSOver->BltFast(179,349,lpDDSPanel,&r,SrcKey);
MakeRect(0,100-Human[Boy]->health,10,100);
lpDDSOver->BltFast(587,477-Human[Boy]->health,lpDDSBar,&r,SrcKey);
MakeRect(10,100-Human[Boy]->ti,20,100);
lpDDSOver->BltFast(607,477-Human[Boy]->ti,lpDDSBar,&r,SrcKey);
MakeRect(20,100-Human[Boy]->nei,30,100);
lpDDSOver->BltFast(627,477-Human[Boy]->nei,lpDDSBar,&r,SrcKey);
for (int i=0;i<Human[Boy]->ThingAmount;i++)
{
MakeRect(Human[Boy]->Thing[i]*32,0);
lpDDSOver->BltFast(189+38*i,439,lpDDSThing,&r,SrcKey);
}
if (Human[Boy]->weapon==Hand)
{
DrawRGBBox(491,437,36,36,1,1);
DrawRGBBox(529,437,36,36,1,0);
}
else
{
DrawRGBBox(529,437,36,36,1,1);
DrawRGBBox(491,437,36,36,1,0);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -