游戏开发学习笔记-2.引擎初现
来源:互联网 发布:书生阅读软件 编辑:程序博客网 时间:2024/05/16 16:22
继上一篇,增加了一个微小的引擎类,此类还不具备基本的引擎功能,后面慢慢填充。
首先是引擎类的头文件声明
#ifndef _ENGINE_H_#define _ENGINE_H_#include <windows.h>#include <d3d9.h>#include <d3dx9.h>#include "Functions.h"#pragma comment(lib,"d3d9.lib")#pragma comment(lib,"d3dx9.lib")//引擎类~引擎虽小,五脏俱全class Engine{public:Engine();~Engine();bool Init(HWND hwnd,UINT uWidth,UINT uHeight,bool bFullscreen=false );//初始化 ~看字明意void ClearScreen(D3DCOLOR color=D3DCOLOR_XRGB(0,0,0));//清屏 ~简洁明了void StartRender();//开始渲染~看字明意void EndRender();//结束渲染~看字明意void Shutdown();//关闭~看字明意private:LPDIRECT3D9 m_D3d;//D3D接口指针LPDIRECT3DDEVICE9 m_Dev;//D3D设备HWND hMainHwnd;//窗口句柄 ~不知道要不要用};#endif
然后是引擎类的实现
#include "Engine.h"Engine::Engine(){m_Dev=NULL;m_D3d=NULL;hMainHwnd=NULL;}Engine::~Engine(){Shutdown();//关闭引擎}bool Engine::Init( HWND hwnd,UINT uWidth,UINT uHeight,bool bFullscreen ){if (NULL==(m_D3d=Direct3DCreate9(D3D_SDK_VERSION)))//获取D3D接口指针{ShowMessage("创建D3D接口失败!");return false;}D3DPRESENT_PARAMETERS d3dpp;ZeroMemory(&d3dpp,sizeof(d3dpp));d3dpp.BackBufferCount=1;//缓冲数量d3dpp.BackBufferWidth=uWidth;//缓冲宽度d3dpp.BackBufferHeight=uHeight;//缓冲高度d3dpp.BackBufferFormat=D3DFMT_X8R8G8B8;//缓冲格式d3dpp.EnableAutoDepthStencil=TRUE;//开启自动深度缓冲d3dpp.AutoDepthStencilFormat=D3DFMT_D24S8;//深度缓冲格式d3dpp.Windowed=!bFullscreen;//是否全屏d3dpp.hDeviceWindow=hwnd;//设备窗口d3dpp.SwapEffect=D3DSWAPEFFECT_DISCARD; //交换效果//创建D3D设备if (FAILED(m_D3d->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hwnd,D3DCREATE_HARDWARE_VERTEXPROCESSING,&d3dpp,&m_Dev))){ShowMessage("创建D3D设备失败!");return false;}return true;}void Engine::Shutdown(){SAFE_RELEASE(m_Dev);SAFE_RELEASE(m_D3d);}void Engine::ClearScreen( D3DCOLOR color/*=D3DCOLOR_XRGB(0,0,0)*/ ){m_Dev->Clear(0,NULL,D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,color,1.0f,0);}void Engine::StartRender(){m_Dev->BeginScene();}void Engine::EndRender(){m_Dev->EndScene();m_Dev->Present(NULL,NULL,NULL,NULL);}
另外增加了一个公共函数文件
#ifndef _FUNCTIONS_H_#define _FUNCTIONS_H_#include <windows.h>#define SAFE_RELEASE(P) {if (P!=NULL){P->Release();P=NULL;}}void ShowMessage(LPCSTR lpStr);#endif
#include "Functions.h"void ShowMessage( LPCSTR lpStr ){MessageBox(NULL,lpStr,"Info",MB_OK);}
最后是WinMain窗体的代码,继上一篇的代码,修改部分代码
#include <windows.h>#include "Engine.h"#define WIN_CLASS "dx01"//窗体类名#define WIN_NAME "dx01"//窗体标题#define WIN_WIDTH 800//窗体宽度#define WIN_HEIGHT 600//窗体高度#define WIN_FULLSCREEN false //是否全屏Engine engine; //引擎对象//循环void GameLoop();//Windows消息回调函数LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam){switch(msg){case WM_DESTROY:PostQuitMessage(0);break;case WM_KEYUP:if (wparam==VK_ESCAPE){PostQuitMessage(0);}break;}return DefWindowProc(hwnd,msg,wparam,lparam);}//Window入口函数int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd ){//设置窗口结构类属性WNDCLASSEX wc={sizeof(WNDCLASSEX),CS_CLASSDC,WndProc,0,0,hInstance,NULL,NULL,NULL,NULL,WIN_CLASS,NULL};//注册窗口类型RegisterClassEx(&wc);//创建窗口HWND hwnd= CreateWindow(WIN_CLASS,WIN_NAME,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,WIN_WIDTH,WIN_HEIGHT,NULL,NULL,hInstance,NULL);if (hwnd){ShowWindow(hwnd,nShowCmd);//显示窗口UpdateWindow(hwnd);//更新窗口if (engine.Init(hwnd,WIN_WIDTH,WIN_HEIGHT)){MSG msg;ZeroMemory(&msg,sizeof(msg));//窗口消息循环while (msg.message!=WM_QUIT){if (PeekMessage(&msg,NULL,0U,0U,PM_REMOVE)){TranslateMessage(&msg);//转换消息DispatchMessage(&msg);//分派消息}else{GameLoop();}}engine.Shutdown();}}UnregisterClass(WIN_CLASS,wc.hInstance);return 0;}void GameLoop(){engine.StartRender(); //开始渲染engine.EndRender(); //结束渲染}
运行截图
源代码下载:
http://download.csdn.net/detail/qq578023708/8794921
0 0
- 游戏开发学习笔记-2.引擎初现
- 【Cocos2d-html5游戏引擎学习笔记(1)】游戏引擎初探究和搭建开发环境
- cocos2dx游戏开发学习笔记(五)之引擎框架
- 【Cocos2d-x游戏引擎开发笔记】定时器
- 游戏开发 学习笔记
- WiEngine游戏引擎学习笔记(一)
- [学习笔记]小型java游戏引擎_1
- 【麦可网】Cocos2d-X跨平台游戏开发学习笔记---第三课:认识Cocos2D-X引擎
- 游戏开发学习路线——游戏引擎原理
- 人生如梦游戏间,RPG游戏开源开发讲座(JAVA篇)[1]——风云初现
- 人生如梦游戏间,RPG游戏开源开发讲座(JAVA篇)[1]——风云初现
- 游戏服务器引擎开发笔记之一——游戏服务器引擎的功能简介
- 游戏引擎与游戏引擎开发入门
- 浅析游戏引擎开发
- C++游戏引擎开发
- 游戏引擎开发手札
- 游戏引擎的开发
- android游戏开发引擎
- 探究Linux系统中的system函数返回值
- 泛函编程(30)-泛函IO:Free Monad-Monad生产线
- js循环添加标签并判断添加的次数
- PL/SQL Developer 9.x 注册码
- 毕业课题之------------图像路面边缘的约束条件
- 游戏开发学习笔记-2.引擎初现
- 阻塞IO,非阻塞IO,同步IO,异步IO详细讲解
- Enigma脱壳、Enigma过注册各个版本总结
- Spring—— 源码分析之 JDBCTemplate.batchUpdate()
- C语言合并字符串函数用法(strcat)
- 东莞大学生资讯网
- Android Asynchronous Http Client
- SQL临时表&表变量
- Java基础—继承