包括所有针对 Windows 8.1 开发和更新的应用代码示例,从而包括在 Visual Studio 中使用通用应用模板创建的应用代码示例。此示例包包括所有的开发和更新为Windows8.1的应用程序的代码示例,包括使用任何的Visual Studio中提供的通用的应用程序模板创建的应用程序的代码示例。
一个通用的应用程序的代码示例中的每个解决方案的结构使代码示例可以同时在Windows8.1和Windows Phone8.1上运行。有关如何构建针对使用Visual Studio的Windows和Windows Phone应用程序的详细信息,请参阅构建面向Windows和Windows Phone8.1通过使用Visual Studio应用程序。该样品包提供了一个方便的方式来下载所有的样本一次。
在C#,C+ +和JavaScript可以在此样品包样品。 Windows的样本库中含有多种在Windows8.1和/或Windows Server2012 R2中可用的代码示例,行使各种新的编程模型,平台,功能和组件。
这些下载的样本作为包含一个Visual Studio解决方案(SLN)文件的样品,随着源文件,资产,资源和必需的元数据成功编译和运行示例压缩ZIP文件。
注意这些样品需要Windows8.1和Microsoft Visual Studio2013使用任何通用的应用程序模板,要求您更新您的Visual Studio2013的安装与Microsoft Visual Studio2013 Update 2或更高版本创建的样本。所有这些样品可以在Visual Studio2013编译的Visual Studio2013 Update 2或更高版本,但使用任何通用的应用程序模板需要的Visual Studio2013 Update 2或更高版本创建的样本。
Windows 应用商店游戏示例:
Applies to Windows only
在开始之前,请先熟悉这些教程中讨论的游戏和代码。由于代码非常多,所以我们不会全部加以讨论,尤其是属于 Visual Studio 项目模板的代码或者其他 Direct3D 示例通用的代码。本主题帮你确定查看此代码时的重点与你自己设计游戏时的重点这两者间的区别。
关于 Windows 应用商店 Direct3D 射击游戏示例
本组主题涵盖 Windows 应用商店 Direct3D 射击游戏示例,演示一个简单的 3D 目标射击游戏。该游戏的玩法非常简单:用十字准线瞄准屏幕上的目标,并在时间用完之前射击这些目标!一共有六个级别,每升一级,障碍物(例如移动的柱子)就会增多。游戏目标?打完全部六个级别,并获得高分!如果快速打完某一个级别,则该级别剩余的时间将转移到下一级别的允许时间中。
可以通过三种方法控制游戏:
使用 W、S、A 和 D 键移动,使用鼠标瞄准十字准线。按鼠标左按钮可以射击目标。按 P(或贴靠游戏)可以暂停游戏。
在触摸屏上,使用屏幕左下角的矩形通过上下左右拖动手指可以移动十字准线。触摸右下角的矩形可以开火。触摸并拖动屏幕的其余部分可以瞄准十字准线。触摸屏幕的边缘可以暂停。
如果有游戏控制器,则使用左摇杆可以移动,使用右摇杆可以瞄准十字准线。按右触发器按钮可以开火。按开始按钮可以暂停。
正在操作的游戏示例
代码示例文件简要概述
你是否曾经查看过 Windows 应用商店 Direct3D 射击游戏示例中的代码?在该数据包中,你将发现许多专门为本示例创建的代码文件,这些文件用于实现该游戏本身。下面我们看看这些文件!
当你使用 Microsoft Visual Studio 2012 打开 Simple3DGameDX.sln 文件时,“解决方案资源管理器”窗格中的内容应如下所示:
Simple3DGameDX 解决方案文件的内容
顶层目录包含定义游戏整体结构和实现的代码源文件。
DirectXApp.h 和 DirectXApp.cpp。这些文件定义示例游戏的核心 Windows 应用商店应用组件,包括事件处理、挂起/恢复、辅屏视图、图形适配器信息、图形覆盖层、用户界面元素和 DirectX 交换链。它还为基本用户行为实现状态机。
Simple3DGame.h 和 Simple3DGame.cpp。这些文件定义游戏本身的结构,包括用于核心游戏循环和覆盖层显示的状态机。它还提供将图形呈现绑定到游戏状态的代码。本演练中的大多数内容均引用这一对文件中的代码。
Audio(文件夹)
此文件夹包含游戏中音频相关组件的代码。
代码文件 描述
Audio.cpp/.h 定义用于混合和播放音乐的音频对象。
MediaReader.cpp/.h 提供读取 PCM 音频流的方法。
SoundEffect.cpp/.h 提供混合和播放声音效果的方法。
GameLevels(文件夹)
此文件夹包含定义游戏级别及指定每个游戏级别(共六个)配置的代码。
代码文件 描述
Level.cpp/.h 定义包含游戏级别相关信息的抽象类。
Level[1-6].cpp/.h 定义游戏六个级别中每一个级别的属性和目标。 其中包括完成该级别的时间限制,以及动画、计时、位置及级别中的目标和障碍物总数。
GameObjects(文件夹)
此文件夹包含定义游戏世界中所用对象(如玩家摄像头、动画目标和障碍物)的代码。
代码文件 描述
Animate.cpp/.h 为游戏中的移动目标和立柱障碍物的动画提供计算。
Camera.cpp/.h 提供场景的三维相机视图及其二维投影的实现。
Cylinder.cpp/.h 定义圆柱的 GameObject 类的具体实现。 其中包括用于确定范围(弹药)和圆柱之间交叉点的方法。
Face.cpp/.h 定义矩形平面(“面”)的 GameObject 类的具体实现。其中包括用于确定范围(弹药)和平面之间交叉点的方法。该类用于目标。
GameConstants.h 定义在整个游戏中使用的诸多公共常量。
GameObject.cpp/.h 定义游戏内对象图形基元的行为,包括放置、移动和冲突。
Sphere.cpp/.h 定义范围的 GameObject 类的具体实现。 其中包括用于确定两个范围之间交叉点的方法。 该类用于表示游戏中的弹药。
Input(文件夹)
此文件夹包含特定控制器实现代码。
代码文件 描述
MoveLookController.cpp/.h 提供鼠标/键盘控件、触摸屏控件和 Xbox 360 控制器控件的移动观看控制器的实现。
Meshes(文件夹)
此文件夹包含游戏世界和对象所用的网格几何的代码定义。
代码文件 描述
CylinderMesh.cpp/.h 定义用于创建圆柱游戏对象网格的 MeshObject 类的具体实现。
FaceMesh.cpp/.h 定义用于创建矩形目标游戏对象网格的 MeshObject 类的具体实现。
MeshObject.cpp/.h 定义图形网格基元的常规类。这些基元通过 D3D11 顶点缓冲区和索引缓冲区进行定义,并使用虚拟方法呈现这些基元。
SphereMesh.cpp/.h 定义用于创建球形弹药游戏对象网格的 MeshObject 类的具体实现。
WorldMesh.cpp/.h 定义用于创建游戏世界环境网格的 MeshObject 类的具体实现。
Rendering(文件夹)
此文件夹包含游戏中图形组件的代码。
代码文件 描述
ConstantBuffers.h 定义用于控制图形呈现的 D3D 11 常量缓冲区。
DirectXBase.cpp/.h 提供包括 Direct3D 设备和交换链以及 Direct2D 工厂和设备的基本呈现器。它包括处理交换链的立体和预旋转,以实现更好的呈现性能。 该类非常重要!
GameHud.cpp/.h 定义当前计分的抬头显示。
GameInfoOverlay.cpp/.h 定义包含级别说明和计分信息抬头显示元素的 2D 覆盖层。
GameRenderer.cpp/.h 定义根据此游戏的特定需求而量身定制的 DirectXBase 的具体实现,包括异步创建游戏和级别的设备特定资源的方法。
Material.cpp/.h 定义对象的材料属性。 其中包括用于呈现对象的对象颜色、反射高光颜色、纹理和着色器。
StereoProjection.cpp/.h 提供为三维立体投影创建投影矩阵的帮助程序代码。这些方法在 Camera.cpp 中调用。
TargetTexture.cpp/.h 定义用于为目标创建同心圆位图的方法。
Resources(文件夹)
此文件夹包括游戏示例使用的纹理 DDS 文件、位图图像文件和音频 WAV 文件。
Shaders(文件夹)
此文件夹包括游戏的高级着色语言 (HLSL) 文件、HLSL 方法使用的常量缓冲区的规范。
代码文件 描述
ConstantBuffers.hlsli 定义 HLSL 用于控制图形呈现的 Direct3D 11 常量缓冲区。 此文件与 ConstantBuffers.h 配合使用。
PixelShader.hlsl 包含用于大多数游戏对象呈现的公共像素着色器的 HLSL 代码。 其中包括反射高光的每像素照明。
PixelShaderFlat.hlsl 包含用于游戏世界对象的像素着色器的 HLSL 代码。 它进行的着色要简单的多,并且不包括任何反射光效。
VertexShader.hlsl 包含用于大多数游戏对象呈现的公共顶点着色器的 HLSL 代码。 它与 PixelShader.hlsl 相配对
VertexShaderFlat.hlsl 包含用于游戏世界对象的顶点着色器的 HLSL 代码。 它进行的着色和照明要简单的多。 它与 PixelShaderFlat.hlsl 相配对
Utilities(文件夹)
此文件夹包括游戏的各种支持类和方法。
代码文件 描述
BasicLoader.cpp/.h 提供从磁盘加载资产(如纹理)的方法。
BasicMath.h 定义一些表示矢量和矩阵的简单类型,以及可以对它们执行的一些数学运算。此示例使用 DirectXMath 而不是这些数学函数。
BasicReaderWriter.cpp/.h 提供同步和异步读取和写入数据的方法。
BasicShapes.h 定义一组基本的三维图形基元,如立方体和范围。
DDSTextureLoader.cpp/.h 提供加载 DDS 纹理和为其创建 Direct3D 11 运行时资源的方法。
DirectXSample.h 定义 Windows 应用商店 DirectX 示例中使用的异常处理方法。
GameTimer.cpp/.h 定义高分辨率游戏时钟对象。
PersistentState.cpp/.h 提供一组方法,用于将各种标量和复杂类型的值保存到配置的存储位置及从这些位置加载这些值。
头和库文件 (pch.h)
此示例(以及可能由你自己的 Windows 应用商店 DirectX 游戏)使用的特定预编译 Windows 库和头文件在 pch.h 文件中列出,如下所示:
C++
#include <wrl.h>
#include <d3d11_1.h>
#include <d2d1_1.h>
#include <d2d1effects.h>
#include <dwrite_1.h>
#include <wincodec.h>
#include <DirectXMath.h>
#include <xaudio2.h>
#include <xaudio2fx.h>
#include <mmreg.h>
#include <mfidl.h>
#include <mfapi.h>
#include <mfreadwrite.h>
#include <XInput.h>
#include <stdio.h>
#include <vector>
#include <memory>
#include <ppltasks.h>
#include <agile.h>
这些头文件定义 Windows 运行时 (wrl.h)、Direct3D 11.1 (d3d11_1.h)、Direct2D(d2d1_1.h、d2d1effects.h)、DirectWrite (dwrite_1.h)、DirectXMath、XAudio2、XInput、并行模式库(ppltasks.h、agile.h)和各种 MFC 头文件中的类和方法。