光速的完成了ProduceSystem的client和srv后,数了数,3000行,2周,一个累字了得。。。。休息了两天后,钢哥给我说,来看看聊天面板的帧动画和外置聊天窗口。- -, 最蛋疼的外置聊天窗口还是要做~~诶,之前看过一下此版本的外置窗口实现,纯WIN32 GDI~怎一个痛苦了得,帧动画到时用引擎现成的接口封装完毕~~~但是外置的就很痛苦了,于是就想,外置的窗口不都是win32吗,好,改成3D窗口的试试,改成了,就可以用现成的底层引擎支持~~~~~。
刚开始,看了看源代码,看到了 由游戏的主WinMain传入进来的hWnd和hInstance建立了一个wc窗口风格,然后下面的就是直接调用API Creat(...); 来创建的窗口,看看了Creat的返回参数,OK , HWND, 保存了这个返回值在用
// 初始化3D窗口
if( NULL == ( m_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )
return false;
if( FAILED( m_pD3D->CreateDevice( D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
m_hWnd,
D3DCREATE_HARDWARE_VERTEXPROCESSING,
&d3dpp,
&gTalkDecvice ) ) )
{
return false;
}
OK, 顺利成功,直接顺利渲染出3D窗口,但是过程万多不容易。。。。啊,但是貌似引擎底层是主游戏里的D3Ddevice来初始化很多资源的,怎么办?外部的gTalkDecvice 根本就不用。。。
达人出现,一开发引擎的同事给我说就用主游戏里的D3Ddevice来渲染外部窗口~~ (这么凶?)。。。上代码:
// .h
IDirect3DSwapChain9 *m_pD3dSwapChain9;
// .cpp
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory( &d3dpp, sizeof(d3dpp) );
d3dpp.Windowed = TRUE;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
d3dpp.hDeviceWindow = m_hWnd; // 这里很重要,之前没有写这里
GetD3dDevice()->CreateAdditionalSwapChain( &d3dpp, &m_pD3dSwapChain9 );
if ( !m_pD3dSwapChain9 )
{
return false;
}
// 渲染
// GetD3dDevice() 获取主游戏3D设备句柄
if( NULL == m_pD3dSwapChain9 )
return 0;
IDirect3DSurface9 *pTempD3dSurface9 = NULL;
IDirect3DSurface9 *pTempOldD3dSurface9 = NULL;
m_pD3dSwapChain9->GetBackBuffer( 0, D3DBACKBUFFER_TYPE_MONO, &pTempD3dSurface9 );
GetD3dDevice()->GetRenderTarget( 0, &pTempOldD3dSurface9 );
if ( NULL == pTempD3dSurface9 || NULL==pTempOldD3dSurface9 )
{
return 0;
}
GetD3dDevice()->SetRenderTarget( 0, pTempD3dSurface9 );
GetD3dDevice()->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(221,2,2), 1.0f, 0 );
if( SUCCEEDED( GetD3dDevice()->BeginScene() ) )
{
GetD3dDevice()->EndScene();
}
m_pD3dSwapChain9->Present( NULL, NULL, NULL, NULL, NULL);
pTempD3dSurface9->Release();
pTempD3dSurface9=NULL;
GetD3dDevice()->SetRenderTarget( 0, pTempOldD3dSurface9 );
pTempOldD3dSurface9->Release();
pTempOldD3dSurface9=NULL;
哦也,顺利在外部窗口上渲染出3D界面,而引擎现在也可以使用部分套件,移植GUI。。努力,膜拜达人同事+1.hehe,我们游戏的外置窗口一定要比其它游戏丰富了!呵呵