⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cmain.cpp

📁 骨骼动画 此程序演示了如何在你的游戏中使用骨骼动画技术。
💻 CPP
字号:

#include "CGame.h"
CGame		*g_pGame;


HINSTANCE g_hInstance;
HWND g_hWnd;


LRESULT CALLBACK WindowProc(HWND hWnd, UINT msg , WPARAM wParam, LPARAM lParam)
{
	
   if(g_pGame)
	{
		g_pGame->HandleMessage(hWnd, msg, wParam, lParam);
	}
   switch (msg) 
	{

	case WM_SETFOCUS:
      g_pGame->SetSleep(false);
      break;
    case WM_KILLFOCUS:
      g_pGame->SetSleep(true);
      break;
	case WM_DESTROY:
		PostQuitMessage(0);
		break;

	case WM_KEYDOWN:
		if( wParam == VK_ESCAPE )
			::DestroyWindow(hWnd);
		break;
	default:
		return DefWindowProc(hWnd, msg, wParam, lParam);
	}
   return 0;
}

bool	RegisterWindow(HINSTANCE hInstance)	//注册窗口类
{
	WNDCLASS wc; //注册窗口类
	g_hInstance = hInstance;
	//填充WNDCLASS成员
	wc.cbClsExtra = 0;                       //额外类空间,可选择在其中存放窗口类共有的数据
	wc.cbWndExtra = 0;                       //额外窗口空间,可选择在其中存放每个窗口所拥有的数据
	wc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); //取得绘制窗口背景的画刷物件
	wc.hCursor = LoadCursor(NULL,IDC_ARROW); //窗口类的鼠标光标
	wc.hIcon = LoadIcon(NULL,IDI_QUESTION);  //窗口上和任务栏上显示的图标
	wc.hInstance = g_hInstance;                //应用程序的实例句柄,标示这个窗口类和哪个应用程序的实例相关数据
	wc.lpfnWndProc = WindowProc;             //此类窗口的消息处理函数,在这里指WindowProc函数
	wc.lpszClassName = "D3D框架";            //窗口类的名称
	wc.lpszMenuName = NULL;                  //缺省的菜单名,用他关联一个默认菜单
	wc.style = CS_HREDRAW|CS_VREDRAW;        //类风格

	if( !RegisterClass(&wc) ) 
	  {
		::MessageBox(0, "错误:注册窗口类 - 失败", 0, 0);
		return false;
	  }                   //注册窗口类
		return true;
}
bool InitD3D(HWND g_hWnd)
{
	g_pGame = new CGame;
	if( false == g_pGame->Init( g_hInstance, g_hWnd ) )
	{ 
		::MessageBox(0, "错误:初始化D3D - 失败", 0, 0);
		return false;
	}
	return true;
}
void Cleanup()
{
	SAFE_DELETE(g_pGame);
}

void LogicFrame(float fElapsedTime)
{
	g_pGame->Update(fElapsedTime);
}

void RenderFrame(float fElapsedTime)
{
	g_pGame->Render(fElapsedTime);
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,  LPSTR lpCmdLine,  int nShowCmd )
{

	MSG msg; //消息


	RegisterWindow(hInstance);		//注册窗口类

	g_hWnd=CreateWindow("D3D框架","小游戏",WS_OVERLAPPEDWINDOW,100,100,800,600,
		NULL,NULL,hInstance,NULL);		 //创建窗口
		if (!g_hWnd)
		{
			MessageBox(0,"错误:创建窗口失败 - 失败",0,0);
		}
		////////////////////////
		////初始化D3D//////////

		InitD3D(g_hWnd);
	
		///////////////////////
		ShowWindow(g_hWnd,SW_SHOW);				 //显示窗口
		UpdateWindow(g_hWnd);						//更新窗口
		ZeroMemory(&msg,sizeof(msg));			//清空msg;

		while (msg.message!=WM_QUIT)
		{
			if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
			{
				TranslateMessage(&msg);
				DispatchMessage(&msg);
			} 
			else
			{
				
				// 两个时间戳之间的差值
				static float fPreTime = static_cast<float>(timeGetTime());
				float fCurrentTime = static_cast<float>(timeGetTime());
				float fElapsedTime = (fCurrentTime - fPreTime)*0.001f;
				LogicFrame(fElapsedTime);//逻辑桢
				RenderFrame(fElapsedTime);//渲染桢
				fPreTime = fCurrentTime;
				
			}
		}
	
		Cleanup();//清除

		UnregisterClass("D3D框架",hInstance);		///注册窗口类
		return (int)msg.wParam;			//函数的返回值
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -