x01.Game.Main: 从零开始
一切从零开始,一切皆有可能。
浅墨,90后,《逐梦之旅》深入浅出,堪比大师。
1.安装 DXSDK_June10.exe 或更新版本。
2.运行 vs2012,新建 VC Win32 空项目 x01.Game.Main。
3.在项目属性 Directory 中添加 SDK 中的 Include 和 Lib\X86。在链接 Input 中添加相关依赖项如:d3d9.lib;d3dx9.lib; 等。
4.添加源文件 Main.cpp,内容如下:
// Main.cpp (2013.11.18 by x01)
//
// 1.安装 DirectX SDK 后,需在项目属性 Directory 中分别导入 SDK 中的 Include 和 Lib\X86。
// 2.在链接 Input 中添加相关依赖项: d3d9.lib; d3dx9.lib; #include <Windows.h>
#include <d3d9.h> #define RELEASE(p) if ((p) != NULL) { (p)->Release(); (p) = NULL; } const int ScreenWidth = ;
const int ScreenHeight = ; LPDIRECT3D9 g_D3D = NULL;
LPDIRECT3DDEVICE9 g_Device = NULL; LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
bool InitD3D(HWND hwnd, bool isFullScreen);
void GameRender();
void GameClear(); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrev, LPSTR cmdLine, int cmdShow)
{
WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, WndProc, , , hInstance, NULL, NULL, NULL, NULL,
L"x01GameMainClass", NULL };
RegisterClassEx(&wc); HWND hwnd = CreateWindow(L"x01GameMainClass", L"x01 Game", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, ScreenWidth, ScreenHeight, NULL, NULL, hInstance, NULL); UnregisterClass(wc.lpszClassName, wc.hInstance); if (!InitD3D(hwnd, false))
{
return ;
} ShowWindow(hwnd, SW_SHOWDEFAULT);
UpdateWindow(hwnd); MSG msg;
ZeroMemory(&msg, sizeof(msg)); while (msg.message != WM_QUIT)
{
if (PeekMessage(&msg, NULL, , , PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
GameRender();
}
} GameClear(); return ;
} LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_DESTROY:
PostQuitMessage();
break;
case WM_KEYUP:
if (wParam == VK_ESCAPE)
{
PostQuitMessage();
}
break;
default:
break;
} return DefWindowProc(hwnd, message, wParam, lParam);
} bool InitD3D(HWND hwnd, bool isFullScreen)
{
g_D3D = Direct3DCreate9(D3D_SDK_VERSION);
if (g_D3D == NULL)
{
MessageBox(hwnd, L"Create D3d failed.", L"Error", MB_OK);
return false;
} D3DDISPLAYMODE displayMode;
if (FAILED(g_D3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &displayMode)))
{
MessageBox(hwnd, L"Get Adapter Display Mode Failed.", L"Error", MB_OK); return false;
} D3DPRESENT_PARAMETERS pp;
ZeroMemory(&pp, sizeof(pp)); if (isFullScreen)
{
pp.Windowed = false;
pp.BackBufferWidth = ScreenWidth;
pp.BackBufferHeight = ScreenHeight;
}
else
{
pp.Windowed = true;
} pp.SwapEffect = D3DSWAPEFFECT_DISCARD;
pp.BackBufferFormat = displayMode.Format; if (FAILED(g_D3D->CreateDevice(
D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd, D3DCREATE_HARDWARE_VERTEXPROCESSING,&pp,&g_Device) ))
{
MessageBox(hwnd, L"Create Device Failed.", L"Error", MB_OK); return false;
} return true;
} void GameRender()
{
g_Device->Clear(, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(,,), 1.0f, );
g_Device->BeginScene();
g_Device->EndScene();
g_Device->Present(NULL, NULL, NULL, NULL);
} void GameClear()
{
RELEASE(g_Device);
RELEASE(g_D3D);
}
Main.cp
5.按 F5 调试运行,效果图如下:

该程序是对浅墨的高度模仿,但这并不妨碍我们学习。博客不仅是为了分享,更是对自己的一种总结。
以上项目可作为模板保存。什么时候需要新建项目,可将该模板简单 复制 重命名 即可。
x01.Game.Main: 从零开始的更多相关文章
- Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
学习架构探险,从零开始写Java Web框架时,在学习到springAOP时遇到一个异常: "C:\Program Files\Java\jdk1.7.0_40\bin\java" ...
- 从零开始编写自己的C#框架(20)——框架异常处理及日志记录
最近很忙,杂事也多,所以开发本框架也是断断续续的,终于在前两天将前面设定的功能都基本完成了,剩下一些小功能遗漏的以后发现再补上.接下来的章节主要都是讲解在本框架的基础上进行开发的小巧. 本框架主要有四 ...
- 从零开始编写自己的C#框架(17)——Web层后端首页
后端首页是管理员登陆后进入的第一个页面,主要是显示当前登陆用户信息.在线人数.菜单树列表.相关功能按键和系统介绍.让管理员能更方便的找到息想要的内容. 根据不同系统的需要,首页会显示不同的内容,比如显 ...
- x01.CodeBuilder: 生成代码框架
根据 Assembly 生成代码框架. 这是学习 AvalonEdit 的一个副产品.学习时,照着源代码新建文件夹,新建文件,添加方法与属性,虽然只是个框架,也要花费大量时间.为什么不让它自动生成呢? ...
- 从零开始学 Java - 利用 Nginx 负载均衡实现 Web 服务器更新不影响访问
还记得那些美妙的夜晚吗 你洗洗打算看一个小电影就睡了,这个时候突然想起来今天晚上是服务器更新的日子,你要在凌晨时分去把最新的代码更新到服务器,以保证明天大家一觉醒来打开网站,发现昨天的 Bug 都不见 ...
- x01.os.14: 时间都去哪儿了
时间都去哪儿了 老帕的“花儿为什么这样红”,三分钟引起六次欢呼,却败给了张碧晨.试想一下,如果是人气更高的陈冰,即使唱得和张碧晨一模一样,可能仍然不敌老帕,为什么张碧晨就能取胜呢?有这么个笑话:一人弹 ...
- x01.os.11: IPC 路线图
学习的最好方法就是看代码,所以我们不妨跟着 IPC 的调用路线图,来学习学习 IPC. 从 x01.Lab.Download 下载代码后,首先进入 main.c 文件,在 TestA 中,有这么一句: ...
- x01.os.9: 进程切换
进入内核后,当然不能无所事事.先创建三个进程,分别打印 A,B,C.虽然只是简单的打印,但却是一切扩展的基础,不可等闲视之. 进程切换,涉及一系列的寄存器需要保护,于是,就有了 ProcessStac ...
- x01.Lab.OpenCV: 计算机视觉
横看成岭侧成峰,计算视觉大不同.观看的角度不同,成像自然不同,这对计算机视觉来说,是个大麻烦.但计算机视觉应用如此广泛,却又有不得不研究的理由.指纹机大家都用过吧,这不过是冰山之一角.产品检测,机器人 ...
随机推荐
- Scalaz(11)- Monad:你存在的意义
前面提到了scalaz是个函数式编程(FP)工具库.它提供了许多新的数据类型.拓展的标准类型及完整的一套typeclass来支持scala语言的函数式编程模式.我们知道:对于任何类型,我们只需要实现这 ...
- collection中的retainAll()方法
public class ArraylistDemo { public static void main(String[] args) { Collection list1 = new ArrayLi ...
- python 颜色定义
1.颜色定义说明格式:\033[显示方式;前景色;背景色m前景色 背景色 颜色---------------------------------------30 40 黑色31 41 红色32 42 ...
- linux下安装redis的详细过程
先安装一些组件: yum -y install gcc gcc-c++ libstdc++-devel 下载并安装: # wget http://download.redis.io/releases/ ...
- Guava学习笔记目录
Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,包括 collections, caching, primitives support, concurrency libra ...
- spring amqp rabbitmq fanout配置
基于spring amqp rabbitmq fanout配置如下: 发布端 <rabbit:connection-factory id="rabbitConnectionFactor ...
- java内存模型-volatile
volatile 的特性 当我们声明共享变量为 volatile 后,对这个变量的读/写将会很特别.理解 volatile 特性的一个好方法是:把对 volatile 变量的单个读/写,看成是使用同一 ...
- mac下彻底卸载mysql方法
sudo rm /usr/local/mysqlsudo rm -rf /usr/local/mysql*sudo rm -rf /Library/StartupItems/MySQLCOMsudo ...
- 客观评价C#的优点和缺点
对于C#,coder中可以分为2类:一类是C#死忠,对它赞赏到极点:另一类刚好相反,对它极度排斥. 本文将以全面.客观的方式评价这门语言,特别是语法方面. 其实很多人评价一门语言是带着一种感情色彩的. ...
- AloneJs —— 简洁高效的JavaScript UI库
以前做项目时用了一些第三方的JS UI库,项目比较low的时候用还行,一旦项目要求比较高,特别是交互比较复杂时,某些第三方UI库就显得无能为力,用起来也不顺手,改也不好改,所以我就自己基于jQuery ...