游戏开发笔记之一——API函数、DirectX的关键系统

本文介绍了DirectX的基本概念,作为游戏开发的重要工具,包括DirectX SDK的获取与安装,以及使用Visual Studio 2010作为开发环境。文章详细阐述了游戏引擎的设计概述,强调了渲染引擎、输入系统、声音系统等关键组成部分。此外,重点讲解了DirectX的API函数,如DirectGraphics(Direct3D)、DirectInput、DirectPlay、DirectMusic和DirectSound的功能。最后,通过示例代码展示了如何在Windows中使用Direct3D创建Win32窗口。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

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的窗口类对象,创建窗口,然后显示窗口,然后进行消息循环,就可以实现一个空窗口的显示。具体实现代码如下:


下面是上面讲的框架代码,也是后面的笔记二的基础,需要结合笔记二一起看。

  1. LRESULT WINAPI MsgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)  
  2. {  
  3.    switch(msg)  
  4.       {  
  5.          case WM_DESTROY:  
  6.             PostQuitMessage(0);  
  7.             return 0;  
  8.             break;  
  9.       }  
  10.    return DefWindowProc(hWnd, msg, wParam, lParam);  
  11. }  
  12. int WINAPI WinMain(HINSTANCE hInst, HINSTANCE prevhInst, LPSTR cmdLine, int show)  
  13. {  
  14.  WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L,  
  15.                      hInst, NULL, NULL, NULL, NULL,  
  16.                      "AppClass", NULL };  
  17.     
  18.  RegisterClassEx(&wc);  
  19.    // Create the application's window   
  20.              HWND hWnd = CreateWindow(WINDOW_CLASS, WINDOW_NAME,   
  21. WS_OVERLAPPEDWINDOW,  
  22.         100, 100, 640, 480, NULL, NULL,  
  23.                             hInst ,NULL);  
  24.          ShowWindow(hWnd, SW_SHOWDEFAULT);  
  25.          UpdateWindow(hWnd);  
  26.          // Enter the message loop   
  27.          MSG msg;  
  28.          ZeroMemory(&msg, sizeof(msg));  
  29.          while(msg.message != WM_QUIT)  
  30.             {  
  31.                if(PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE))  
  32.                   {  
  33.                      TranslateMessage(&msg);  
  34.                      DispatchMessage(&msg);  
  35.                   }  
  36.                else  
  37.                   {       
  38. //Do something to the screen   
  39.  }      
  40.       }  
  41.    // Unregister our window.   
  42.    UnregisterClass("AppClass", wc.hInstance);  
  43.    }  






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

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

第二阶段,熟悉windows下的编程。推荐看《Windows程序设计》。

第三阶段,Visual C++的学习。推荐的书目有孙鑫老师的《VC++深入详解》和孙鑫老师的vc视频教程。以及侯俊杰老师的《MFC深入详解》,与时俱进的有尹成老师的《Visual C++2010开发权威指南》,但这本书推荐有一定的Visual C++基础之后再看。
(第二阶段和第三阶段可以结合着来学习,有很多知识是相辅相成的,并没有什么大的界限。)

第四阶段,开始学习专门介绍游戏开发的教程(有DirectX和OpenGL两条路可选,这里我们选择DirectX,DirectX在国内为主流。具体比较请移步最近刚写的这篇文章 【Visual C++】游戏开发笔记十九 DirectX与OpenGL的博弈),推荐书籍为《DirectX 9.0 3D游戏开发编程基础》(封面为一个红龙的),《Windows游戏编程大师技巧》,《Direct3D游戏开发技术详解》等等,当然这类教程就比较多了。新出的有很多,DirectX相关的层出不穷,也可以选择刚发行不久的新书,毕竟上面讲的知识比较前沿,现在技术革新速度很快,初学时就学习最新的技术,可以让你少走弯路。


还有什么经典的书籍,欢迎大家交流补充~~

以上就是本节笔记的全部内容。


以前自己也不怎么写技术博客的,写的时候发现确实不是件容易的事,所有这有些东西还是参考别人的,我觉得挺好的,希望对能看到这些文章的朋友有所帮助! 

                                                                                                                                              -----浪子文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值