当前位置:编程学习 > VC++ >>

(Visual C++)游戏开发笔记之一——API函数、DirectX的关键系统

在从第一节开始看这个笔记系列的话,大家会发现,一上来就开始讲DirectX相关的内容,但是写了几节之后,又开始讲GDI了。
这是因为我写完前几节后,发觉直接讲DirectX有些生硬。最后我想了一下,应该先梳理完GDI相关的重点知识,再来讲DirectX,毕
竟游戏编程里面windows API是基础。所以先讲windows API,再来讲DirectX,这样会自然得多。

               ————浅墨于2012年3月26日注

 

作为visual C++,DirectX入门的第一讲,概念性东西比较多。

1.DirectX的定义
首先,我们必须了解DirectX的定义。DirectX,(Direct eXtension,简称DX)是由微软公司创建的多媒体编程接口。由C++编程语言实现,遵循COM。被广泛使用于Microsoft Windows、Microsoft Xbox和Microsoft Xbox 360电子游戏开发,并且只能支持这些平台。最新版本为DirectX 11,创建在最新的Windows 7上。Microsoft DirectX 是这样一组技术:它们旨在使基于Windows 的计算机成为运行和显示具有丰富多媒体元素(例如全色图形、视频、3D 动画和丰富音频)的应用程序的理想平台。DirectX 包括安全和性能更新程序,以及许多涵盖所有技术的新功能。应用程序可以通过使用DirectX API 来访问这些新功能。

2.必要的工具和开发环境
要进行游戏的开发,我们必须拥有一套最新的DirectX SDK(软件开发包)。我们可以从微软的官方下载站进行下载然后安装,这里贴出地址,http://msdn.microsoft.com/zh-cn/directx/aa937788.aspx。当然我们还要拥有开发环境,我们选择Microsoft公司的Visual Studio 2010。


3.引擎设计概述
游戏引擎是一系列高级代码,我们可以以它为基础开发自己的游戏。现代的游戏引擎已经对使用他的人隐藏了底层实现的细节和规范。例如,可以在OpenGL和Direct3D的基础上开发渲染引擎,这样,引擎用户就不需要知道使用的是哪一个渲染引擎,尽管也用到了一些底层的东西。
游戏引擎包括:渲染引擎,物理引擎,声音引擎等。游戏引擎本身只是一个由更小的引擎组成的集合。游戏引擎或它涵盖的内容并没有一个精确的定义。
对于视频游戏而言,它的游戏引擎至少要包含渲染引擎和输入引擎,这是必须的,否则,就不能称其为交互式游戏。
游戏程序员和游戏引擎程序员完成的是两种不同的工作。游戏程序员只与开发游戏的游戏引擎打交道,而游戏引擎程序员要开发出其他人用于开发游戏的引擎。

4.游戏引擎中的几个关键系统
游戏引擎中的几个关键系统有:游戏渲染系统,输入系统,声音系统,物理系统,动画系统,人工智能(AI)系统等。

5. DirectX API函数
DirectX的API主要由DirectGraphics,DirectInput,DirectPlay,DirectMusic,DirectSound组成。每个API之间相互独立,负责完成DirectX内核中不同的功能。DirectX中每个API都可以通过硬件加速,这意味着这些API可以直接和运行软件的底层硬件对话。下面是各种API函数的概要解释。
DirectGraphics:
DirectGraphics为负责向屏幕渲染二维图形和三维图形的DirectX API,也就是众所周知的Direct3D。
DirectInput:
DirectInput是可以直接使用所有与计算机关联的输入设备的DirectX API。这些设备包括键盘,鼠标和游戏控制器设备。
DirectPlay:
DirectPlay是控制Direct中网络功能的Direct API。DirectPlay可以让应用程序对机器进行网络功能设置,从而可以通过和其他网络玩家交流。
DirectMusic:
DirectMusic是负责普通声音处理的DirectX API。
DirectSound:
DirectSound是负责高级声音处理的DirectX API。

6.动手写一个窗口
在Windows中使用Direct3D创建Win32窗口非常简单。要创建一个Win32窗口就必须拥有一个WinMain()函数(这不是废话是什么)。我们可以在MSDN中查到WinMain()的标准句法
int WINAPI WinMain(         
HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpCmdLine,
    int nCmdShow
);
当程序第一次运行时,WinMain()函数中的所有参数从系统获取自己的相应参数值。通过在WinMain函数内部创建一个类型为WNDCLASSSEX的窗口类对象,创建窗口,然后显示窗口,然后进行消息循环,就可以实现一个空窗口的显示。具体实现代码如下:

下面是上面讲的框架代码,也是后面的笔记二的基础,需要结合笔记二一起看。
[cpp]
LRESULT WINAPI MsgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) 

   switch(msg) 
      { 
         case WM_DESTROY: 
            PostQuitMessage(0); 
            return 0; 
            break; 
      } 
   return DefWindowProc(hWnd, msg, wParam, lParam); 

int WINAPI WinMain(HINSTANCE hInst, HINSTANCE prevhInst, LPSTR cmdLine, int show) 

 WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L, 
                     hInst, NULL, NULL, NULL, NULL, 
                     "AppClass", NULL }; 
   
 RegisterClassEx(&wc); 
   // Create the application's window 
             HWND hWnd = CreateWindow(WINDOW_CLASS, WINDOW_NAME,  
WS_OVERLAPPEDWINDOW, 
        100, 100, 640, 480, NULL, NULL, 
                            hInst ,NULL); 
         ShowWindow(hWnd, SW_SHOWDEFAULT); 
         UpdateWindow(hWnd); 
         // Enter the message loop 
         MSG msg; 
         ZeroMemory(&msg, sizeof(msg)); 
         while(msg.message != WM_QUIT) 
            { 
               if(PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE)) 
                  { 
                     TranslateMessage(&msg); 
                     DispatchMessage(&msg); 
                  } 
               else 
                  {      
//Do something to the screen 
 }     
      } 
   // Unregister our window. 
   UnregisterClass("AppClass", wc.hInstance); 
   } 

 

 


发现大家都在留言中说要推荐一下游戏开发相关的书籍,我这里就把各个阶段(从零基础开始)的推荐教程列出来吧,平时我写这个系列的笔记就参考了下面的很多书籍,大家感兴趣的话,可以深入去学习(推荐去买实体书,这样就不用整天盯着电脑屏幕看伤害眼睛,健康是金钱买不来的):

第一阶段,首先是C++的精通。推荐《C++ Primer》。

第二阶段(也可以跳过这一阶段,看个人发挥吧),熟悉windows下的编程。推荐看《windows程序设计》。(感谢minnnnnmi的指出)

第三阶段,Visual C++的学习。推荐的书目有孙鑫老师的《vc++深入详解》和孙鑫老

补充:软件开发 , Vc ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,