|
|
论坛里有兄弟着急了
不是说了昨天忙,晚点给你的嘛
我已经上传到我的Blog里了
如有需要可以去下载,太忙了,就不注释了
不知是不是网络问题,Gameres中上传好慢 [em1]
#include <Windows.h>
#include <d3d9.h>
#include <d3dx9.h>
#include <D3dx9core.h>
#pragma comment(lib, "d3dx9dt.lib")
#pragma comment(lib, "d3d9.lib")
#pragma comment(lib, "d3dxof.lib")
#pragma comment(lib, "dxguid.lib")
#define SAFE_RELEASE(p) { if(p) { (p)->Release(); (p)=NULL; } }
////////////////////////////////////////////////////////////////////////////////////////////////
LPDIRECT3D9 g_pD3D = NULL; // Used to create the D3DDevice
LPDIRECT3DDEVICE9 g_pd3dDevice = NULL; // Our rendering device
LPDIRECT3DTEXTURE9 g_Texture = NULL; // Our texture
LPD3DXSPRITE g_Sprite = NULL;
RECT m_SrcRect; //图像显示范围
D3DXVECTOR2 m_Scaling; //缩放
D3DXVECTOR2 m_RotationCenter; //图像中心
D3DXVECTOR2 m_Translation; //图像显示坐标
FLOAT m_Rotation; //旋转角度
D3DCOLOR m_Color; //颜色(半透明,滤色镜)
HRESULT InitD3D( HWND hWnd )
{
g_pD3D = Direct3DCreate9(D3D_SDK_VERSION);
if(g_pD3D == NULL)
{
return E_FAIL;
}
D3DDISPLAYMODE d3ddm;
if(FAILED(g_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm)))
{
return E_FAIL;
}
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory(&d3dpp, sizeof(d3dpp));
d3dpp.Windowed = TRUE;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = d3ddm.Format;
if(FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &g_pd3dDevice)))
{
return E_FAIL;
}
if( FAILED( D3DXCreateSprite( g_pd3dDevice, &g_Sprite ) ) )
{
MessageBox(NULL, TEXT("D3DXCreateSprite Error!"), TEXT("Error"), NULL);
return E_FAIL;
}
return S_OK;
}
void InitGame( HWND hWnd )
{
InitD3D( hWnd );
//加载纹理
if( FAILED( D3DXCreateTextureFromFile(g_pd3dDevice, "mcircle.jpg", &g_Texture) ) )
MessageBox(NULL, TEXT("InitGame Error!"), TEXT("Error"), NULL);
m_SrcRect.left = 0; //图像显示范围
m_SrcRect.top = 0;
m_SrcRect.right = 256;
m_SrcRect.bottom = 256;
m_Scaling.x = 1.0f; //缩放
m_Scaling.y = 1.0f;
m_RotationCenter.x = 0.0f; //图像中心
m_RotationCenter.y = 0.0f;
m_Translation.x = 0.0f; //图像显示坐标
m_Translation.y = 0.0f;
m_Rotation = 0.0f; //旋转角度
m_Color = 0XFFFFFFFF; //颜色(半透明,滤色镜)
}
void Render()
{
g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, 0XFF000000, 1.0f, 0);
if( SUCCEEDED( g_pd3dDevice->BeginScene() ) )
{
g_Sprite->Begin();
g_Sprite->Draw(g_Texture,
&m_SrcRect,
&m_Scaling,
&m_RotationCenter,
m_Rotation,
&m_Translation,
m_Color);
g_Sprite->End();
g_pd3dDevice->EndScene();
g_pd3dDevice-> resent(NULL, NULL, NULL, NULL);
}
}
void GameLoop()
{
MSG msg;
BOOL fMessage;
PeekMessage(&msg, NULL, 0U, 0U, PM_NOREMOVE);
while(msg.message != WM_QUIT)
{
fMessage = PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE);
if(fMessage)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
Render();
}
}
}
LRESULT WINAPI WinProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;
break;
case WM_KEYUP:
switch (wParam)
{
case VK_ESCAPE:
DestroyWindow(hWnd);
return 0;
break;
}
break;
}
return DefWindowProc(hWnd, msg, wParam, lParam);
}
void GameRelease()
{
SAFE_RELEASE(g_Texture);
SAFE_RELEASE(g_Sprite);
SAFE_RELEASE(g_pd3dDevice);
SAFE_RELEASE(g_pD3D);
}
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, WinProc, 0L, 0L,
GetModuleHandle(NULL), NULL, NULL, NULL, NULL,
"2d", NULL };
RegisterClassEx( &wc );
HWND hWnd = CreateWindow( "2d", "test",
WS_OVERLAPPEDWINDOW, 100, 100, 300, 300,
GetDesktopWindow(), NULL, wc.hInstance, NULL );
ShowWindow(hWnd, SW_SHOWDEFAULT);
UpdateWindow(hWnd);
InitGame(hWnd);
GameLoop();
GameRelease();
UnregisterClass("2d", wc.hInstance);
return 0;
} |
|