#include "Utility.h"
HWND g_hWnd = 0;
HINSTANCE g_hInstance = 0;
LRESULT CALLBACK WndProc(HWND hWnd ,UINT uMsg,
WPARAM wParam,LPARAM lParam);
LPDIRECT3D9 g_pD3D = nullptr;
LPDIRECT3DDEVICE9 g_pDevice = nullptr;
LPD3DXSPRITE g_pSprite = nullptr;
LPDIRECT3DTEXTURE9 g_pTexture = nullptr;
D3DXIMAGE_INFO g_ImageInfo;
//用来存储矩形区域的容器
vector<RECT*> g_vecRects;
float g_fDeltaTime = 1.0f;
//矩阵:用来控制图片的平移、旋转、缩放变换
D3DXMATRIX g_matWorld; //世界坐标系下的矩阵(4x4)
D3DXVECTOR2 g_playerPos;
LPDIRECT3DTEXTURE9 g_pCarrot = nullptr;
//作业:利用SetTimer实现每1秒切换1张图片的功能
VOID onInitGame()
{
D3DXCreateSprite(g_pDevice, &g_pSprite);
ZeroMemory(&g_ImageInfo, sizeof(g_ImageInfo));
D3DXCreateTextureFromFileEx(
g_pDevice, TEXT("Resources\\Textures\\blocks9.png"),
D3DX_FROM_FILE,D3DX_FROM_FILE,
0,0,D3DFMT_UNKNOWN,D3DPOOL_MANAGED,
D3DX_FILTER_LINEAR,D3DX_FILTER_LINEAR,
D3DCOLOR_XRGB(254,253,255),&g_ImageInfo,nullptr,&g_pTexture);
D3DXCreateTextureFromFile(g_pDevice,
TEXT("Resources\\Textures\\carrot.png"), &g_pCarrot);
INT iTileWidth = g_ImageInfo.Width / 3; //单元格的宽(Tile:单元格)
INT iTileHeight = g_ImageInfo.Height / 3; //单元格的高(Tile:单元格)
for (int i = 0; i < 3; ++i)
{
for (int j = 0; j < 3; ++j)
{
RECT * pRect = new RECT;
SetRect(pRect,
iTileWidth * j ,
iTileHeight * i,
iTileWidth * j + iTileWidth,
iTileHeight * i + iTileHeight
);
g_vecRects.push_back(pRect);
}
}
//将矩阵置为单位矩阵
D3DXMatrixIdentity(&g_matWorld);
g_playerPos = D3DXVECTOR2(200, 100);
}
VOID onInit()
{
g_pD3D = Direct3DCreate9(D3D_SDK_VERSION);
D3DDISPLAYMODE d3ddm;
ZeroMemory(&d3ddm, sizeof(D3DDISPLAYMODE));
g_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm);
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory(&d3dpp, sizeof(d3dpp));
d3dpp.BackBufferCount = 1;
d3dpp.Windowed = true;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL,
g_hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &g_pDevice);
onInitGame();
}
VOID onLogic(float fElapsedTime)
{
}
VOID onRender(float fElapsedTime)
{
g_pDevice->Clear(0, nullptr, D3DCLEAR_TARGET,
D3DCOLOR_XRGB(123, 234, 123), 1.0f, 0);
g_pDevice->BeginScene();
g_pSprite->Begin(D3DXSPRITE_ALPHABLEND);
//static vector<RECT*>::iterator iter = g_vecRects.begin();
//g_pSprite->Draw(
// g_pTexture,
// *iter, //图片自身的矩形区域
// &D3DXVECTOR3(g_ImageInfo.Width/3/2,g_ImageInfo.Height/3/2, 0), //锚点
// &D3DXVECTOR3(400, 300, 0), //锚点在客户区的坐标位置
// D3DCOLOR_XRGB(255, 255, 255)
// );
//g_pSprite->Draw(
// g_pTexture,
// *iter, //图片自身的矩形区域
// &D3DXVECTOR3(0,0,0), //锚点
// &D3DXVECTOR3(400,300,0), //锚点在客户区的坐标位置
// D3DCOLOR_XRGB(255,255,255)
// );
//g_fDeltaTime -= fElapsedTime;
//if (g_fDeltaTime <= 0.0f)
//{
// ++iter;
// if (iter == g_vecRects.end())
// iter = g_vecRects.begin();
// g_fDeltaTime = 1.0f;
//}
//2D图片的变换:Translation(平移),Rotation(旋转),Scale(缩放)
//获得一个具有变换信息的矩阵
static float fAngle = 0.0f;
fAngle += fElapsedTime*10;
D3DXMatrixTransformation2D(
&g_matWorld, //返回的矩阵
nullptr, //缩放的中心
0.0f, //影响缩放的因素
&D3DXVECTOR2(1.0f, 1.0f), //在X、Y方向的缩放量
&D3DXVECTOR2(0.0f, 0.0f), //旋转中心
fAngle, //旋转弧度
&g_playerPos//平移量
);
g_pSprite->SetTransform(&g_matWorld);
g_pSprite->Draw(
g_pTexture,
nullptr,
&D3DXVECTOR3(g_ImageInfo.Width / 2.0f, g_ImageInfo.Height / 2.0f, 0.0f),
&D3DXVECTOR3(0.0f,0.0f,0.0f),
0xFFFFFFFF
);
//----恢复渲染状态---- ****************************
D3DXMatrixIdentity(&g_matWorld);
g_pSprite->SetTransform(&g_matWorld);
g_pSprite->Draw(
g_pCarrot,
nullptr,
&D3DXVECTOR3(0.0f, 0.0f, 0.0f),
&D3DXVECTOR3(0.0f, 0.0f, 0.0f),
0xFFFFFFFF
);
g_pSprite->End();
g_pDevice->EndScene();
g_pDevice->Present(nullptr, nullptr, 0, nullptr);
}
VOID onDestroy()
{
Safe_Release(g_pTexture);
Safe_Release(g_pSprite);
Safe_Release(g_pDevice);
Safe_Release(g_pD3D);
}
INT WINAPI WinMain( __in HINSTANCE hInstance,
__in_opt HINSTANCE hPrevInstance,
__in_opt LPSTR lpCmdLine,
__in int nShowCmd )
{
WNDCLASS wc;
ZeroMemory(&wc,sizeof(wc));
wc.cbClsExtra = NULL;
wc.cbWndExtra = NULL;
wc.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH);
wc.hCursor = LoadCursor(0,IDC_ARROW);
wc.hIcon = LoadIcon(0,IDI_APPLICATION);
wc.hInstance = hInstance;
wc.lpfnWndProc = WndProc;
wc.lpszClassName = TEXT("Alibaba");
wc.lpszMenuName = NULL;
wc.style = CS_HREDRAW | CS_VREDRAW;
RegisterClass(&wc);
g_hWnd = CreateWindow(wc.lpszClassName,
TEXT("D3D_FirstApp"),WS_OVERLAPPEDWINDOW,
50,20,800,600,NULL,NULL,hInstance,NULL);
if(g_hWnd)
{
g_hInstance = hInstance;
onInit();
ShowWindow(g_hWnd,SW_SHOWNORMAL);
UpdateWindow(g_hWnd);
}
MSG msg;
ZeroMemory(&msg,sizeof(msg));
while ( msg.message!=WM_QUIT)
{
if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
static DWORD dwTime = timeGetTime();
DWORD dwCurrentTime = timeGetTime();
DWORD dwElapsedTime = dwCurrentTime - dwTime;
float fElapsedTime = dwElapsedTime * 0.001f;
onLogic(fElapsedTime);
onRender(fElapsedTime);
if (dwElapsedTime < 1000 / 60)
Sleep(1000 / 60 - dwElapsedTime);
dwTime = dwCurrentTime;
}
}
onDestroy();
UnregisterClass(wc.lpszClassName, hInstance);
return 0;
}
LRESULT CALLBACK WndProc(HWND hWnd ,UINT uMsg,
WPARAM wParam,LPARAM lParam)
{
switch(uMsg)
{
case WM_MOUSEMOVE:
g_playerPos.x = LOWORD(lParam);
g_playerPos.y = HIWORD(lParam);
break;
case WM_KEYDOWN:
if(wParam == VK_ESCAPE)
DestroyWindow(hWnd);
break;
case WM_CLOSE:
DestroyWindow(hWnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
}
return DefWindowProc(hWnd,uMsg,wParam,lParam);
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
Sprite_锚点与变换.zip (23个子文件)
Sprite_锚点与变换
Sprite_锚点与变换.sdf 37.94MB
Sprite_锚点与变换.v12.suo 14KB
Debug
Sprite_锚点与变换.exe 63KB
Sprite_锚点与变换.ilk 373KB
Sprite_锚点与变换.pdb 787KB
Sprite_锚点与变换
Utility.h 699B
Resources
Textures
blocks9.png 932B
carrot.png 0B
Sprite_锚点与变换.vcxproj 4KB
Debug
vc120.pdb 452KB
Sprite_锚点与变换.log 2KB
WinMain.obj 155KB
vc120.idb 683KB
Sprite_锚点与变换.tlog
CL.write.1.tlog 688B
link.command.1.tlog 1KB
Sprite_锚点与变换.lastbuildstate 215B
CL.read.1.tlog 23KB
link.write.1.tlog 660B
cl.command.1.tlog 734B
link.read.1.tlog 3KB
WinMain.cpp 6KB
Sprite_锚点与变换.vcxproj.filters 1KB
Sprite_锚点与变换.sln 1012B
共 23 条
- 1
资源评论
Linimass
- 粉丝: 99
- 资源: 11
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功