1. SharpDX简介
SharpDX 是一个免费而且开源的项目,是一个托管语言对DirectX的封装库。SharpDX封装了几乎全部的DirectX的API,而且最新版本3.0.x已经添加了对Directx12的支持,可以说功能十分的强大。利用SharpDX提供的DirectX的封装库,可以编写出绚丽的2D和3D游戏。但是SharpDX的资料却是少的可怜,相比微软的XNA,与之配套的工具和资料都很少。我也是一个初学者,刚开始学习SharpDX的时候因为找不到资料而无从学起,所以想通过这个教程分享一下我在学习SharpDX中的一些经验和教训,希望对大家有所帮助。这是我第一次写教程,所以不足之处还请大家多多见谅。
另附SharpDX官网地址:http://sharpdx.org/
2. 新建一个SharpDX工程
在这个教程中,我将教大家如何利用C#和SharpDX编写一个2D坦克大战游戏,当然,其他.NET语言,例如VB.NET等也可以进行编写。我用的IDE是VS2013,首先打开IDE,新建一个C#工程:
①新建Windows窗体应用程序,选择.NET4框架
②新建工程之后,我们将引用SharpDX的库文件。在这里,我们用的是2.6.3版本的库,大家可以去官网下载。SharpDX库包括两个部分,一是对DirectX的封装,二是编程框架Toolkit(3.0版本被取消),SharpDX提供的编程框架与XNA的十分相似,用这个编程框架,能极大地减少我们的工作量,所以本教程没有采用最新的3.0版本,而是采用了2.6.3版本。新建工程后,点击项目->添加引用,将DirectX11-net40文件夹下的这几个文件添加进去:
SharpDX.dll, SharpDX.Direct3D11.dll, SharpDX.DXGI.dll, SharpDX.Toolkit.dll,SharpDX.Toolkit.Game.dll, SharpDX.Toolkit.Graphics.dll, SharpDX.Toolkit.Input.dll
并选择复制本地。
③新建工程后,IDE默认添加了一个Form1窗体,我们将其删掉,并新建一个类,起名叫做 MyGame,并继承自Game类。添加如下引用:
using System;
using SharpDX;
using SharpDX.Toolkit;
using SharpDX.Toolkit.Graphics;
并添加两个成员变量:
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
graphics用来设置与显示相关的参数,spriteBatch是一个精灵集,用来进行绘图。
再添加一个MyGame的无参构造函数,来对游戏进行配置:
public MyGame()
{
graphics = new GraphicsDeviceManager(this);
//设置分辨率
graphics.PreferredBackBufferWidth = 800;
graphics.PreferredBackBufferHeight = 600;
graphics.IsFullScreen = false;
//禁用鼠标
IsMouseVisible = false;
//更改刷新率
TargetElapsedTime = new TimeSpan(0, 0, 0, 0, 25);
//设置content根目录
Content.RootDirectory = "Assets";
}
完整代码如下所示:
public class MyGame : Game
{
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
public MyGame()
{
graphics = new GraphicsDeviceManager(this);
//设置分辨率
graphics.PreferredBackBufferWidth = 800;
graphics.PreferredBackBufferHeight = 600;
graphics.IsFullScreen = false;
//禁用鼠标
IsMouseVisible = false;
//更改刷新率
TargetElapsedTime = new TimeSpan(0, 0, 0, 0, 25);
//设置content根目录
Content.RootDirectory = "Assets";
}
}
④添加完代码后,打开Program.cs,修改main函数为如下:
static void Main()保存并运行,如果一切顺利,你应该能够看到一个背景为黑色的大小为800 * 600的窗体展现在你的眼前了,下一节,我将教大家如何向游戏中添加一个能由玩家控制的小坦克。
{
using(MyGame game = new MyGame())
{
game.Run();
}
}