一切从零开始,一切皆有可能。

浅墨,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: 从零开始的更多相关文章

  1. 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" ...

  2. 从零开始编写自己的C#框架(20)——框架异常处理及日志记录

    最近很忙,杂事也多,所以开发本框架也是断断续续的,终于在前两天将前面设定的功能都基本完成了,剩下一些小功能遗漏的以后发现再补上.接下来的章节主要都是讲解在本框架的基础上进行开发的小巧. 本框架主要有四 ...

  3. 从零开始编写自己的C#框架(17)——Web层后端首页

    后端首页是管理员登陆后进入的第一个页面,主要是显示当前登陆用户信息.在线人数.菜单树列表.相关功能按键和系统介绍.让管理员能更方便的找到息想要的内容. 根据不同系统的需要,首页会显示不同的内容,比如显 ...

  4. x01.CodeBuilder: 生成代码框架

    根据 Assembly 生成代码框架. 这是学习 AvalonEdit 的一个副产品.学习时,照着源代码新建文件夹,新建文件,添加方法与属性,虽然只是个框架,也要花费大量时间.为什么不让它自动生成呢? ...

  5. 从零开始学 Java - 利用 Nginx 负载均衡实现 Web 服务器更新不影响访问

    还记得那些美妙的夜晚吗 你洗洗打算看一个小电影就睡了,这个时候突然想起来今天晚上是服务器更新的日子,你要在凌晨时分去把最新的代码更新到服务器,以保证明天大家一觉醒来打开网站,发现昨天的 Bug 都不见 ...

  6. x01.os.14: 时间都去哪儿了

    时间都去哪儿了 老帕的“花儿为什么这样红”,三分钟引起六次欢呼,却败给了张碧晨.试想一下,如果是人气更高的陈冰,即使唱得和张碧晨一模一样,可能仍然不敌老帕,为什么张碧晨就能取胜呢?有这么个笑话:一人弹 ...

  7. x01.os.11: IPC 路线图

    学习的最好方法就是看代码,所以我们不妨跟着 IPC 的调用路线图,来学习学习 IPC. 从 x01.Lab.Download 下载代码后,首先进入 main.c 文件,在 TestA 中,有这么一句: ...

  8. x01.os.9: 进程切换

    进入内核后,当然不能无所事事.先创建三个进程,分别打印 A,B,C.虽然只是简单的打印,但却是一切扩展的基础,不可等闲视之. 进程切换,涉及一系列的寄存器需要保护,于是,就有了 ProcessStac ...

  9. x01.Lab.OpenCV: 计算机视觉

    横看成岭侧成峰,计算视觉大不同.观看的角度不同,成像自然不同,这对计算机视觉来说,是个大麻烦.但计算机视觉应用如此广泛,却又有不得不研究的理由.指纹机大家都用过吧,这不过是冰山之一角.产品检测,机器人 ...

随机推荐

  1. Lucene.net站内搜索—6、站内搜索第二版

    目录 Lucene.net站内搜索—1.SEO优化 Lucene.net站内搜索—2.Lucene.Net简介和分词Lucene.net站内搜索—3.最简单搜索引擎代码Lucene.net站内搜索—4 ...

  2. 六个创建模式之建造者模式(Builder Pattern)

    定义: 将一个复杂的对象的构建与它的表示分类,使得同样的构建过程可以创建不同的表示.建造者模式一步步地创建一个复杂对象,但用户仅需指定对象的类型和内容,不需要关心各个部分之间的关联关系. 结构图: B ...

  3. JS代码实用代码实例(输入框监听,点击显示点击其他地方消失,文件本地预览上传)

    前段时间写前端,遇到一些模块非常有用,总结以备后用 一.input框字数监听 <!DOCTYPE html> <html lang="en"> <he ...

  4. 【HTML5】HTML5本地数据库(Web Sql Database)

    Web Sql数据库简介 Web SQL数据库API实际上不是HTML5规范的组成部分,而是单独的规范.它通过一套API来操纵客户端的数据库. Web SQL数据库的浏览器支持情况 Web SQL 数 ...

  5. .NET正则表达式匹配Silverlight

    这是一个.NET正则表达式匹配工具的Silverlight 在页面中加入以下代码就可以了: <"> <param name="source" value ...

  6. ArcGIS JS 学习笔记2 实现仿百度的拖拽画圆

    一.前言 吐槽一下,百度在国内除了百度地图是良心产品外,其他的真的不敢恭维.在上一篇笔记里,我已经实现了自定义的地图测量模块.在百度地图里面(其他地图)都有一个周边搜索的功能,拖拽画一个圆,然后以圆半 ...

  7. IOS常用第三方开源类库&组件

    1.AFNetworking AFNetworking 采用 NSURLConnection + NSOperation, 主要方便与服务端 API 进行数据交换, 操作简单, 功能强大, 现在许多人 ...

  8. 对Xcode菜单选项的详细探索(干货)

    本文调研Xcode的版本是 7.1,基本是探索了菜单的每一个按钮.虽然从xcode4一直用到了xcode7,但是一般都只是用了一些基础的功能,说来也惭愧.在一次偶然的机遇突然发现了“显示调用层级”的选 ...

  9. Android 图片的缩放与旋转

    本文实现Android中的图片的缩放效果 首先设计布局: <LinearLayout xmlns:android="http://schemas.android.com/apk/res ...

  10. UISegmentedControl(人物简介)

    效果图 当你点击上面人物名字的时候 ,就可以随意切换人物. 这个很有趣 , 你还可以试着添加音乐播放器 .以及一些别的来完善你想做的. 好吧 , 废话不多说 , 上代码. #import " ...