原文 http://www.johanfalk.eu/blog/sharpdx-tutorial-part-2-creating-a-windowphp
在第二篇教程中,咱們將介紹如何建立一個稍後將呈現的簡單窗口。函數
首先,咱們將建立一個名爲的新類Game
。右鍵單擊項目並選擇「添加 - >類...」,將文件命名爲「Game.cs」。
oop
首先,咱們將類RenderForm
設爲public,而後添加一個帶有兩個變量來保存窗口客戶端大小的寬度和高度(渲染大小,不包括窗口的邊框)。該RenderForm
班還須要是一個引用添加到SharpDX.Windows
。優化
using SharpDX.Windows; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MySharpDXGame { public class Game { private RenderForm renderForm; private const int Width = 1280; private const int Height = 720; } }
它RenderForm
是Windows.Form
SharpDX提供的子類。這個類就像Windows.Form
爲咱們提供了一個帶有邊框,標題欄等的窗口。但它也爲咱們提供了一個針對3D圖形進行了優化的渲染循環。若是您想了解更多相關信息,請查看SlimDX(相似於SharpDX的另外一個包裝器)文檔:http://slimdx.org/tutorials/BasicWindow.php 。spa
接下來,咱們將構造函數添加到Game
建立RenderForm 的類中。咱們還須要添加一個引用System.Drawing
。咱們還將設置標題並禁止用戶調整窗口大小。code
using System.Drawing; [...] public Game() { renderForm = new RenderForm("My first SharpDX game"); renderForm.ClientSize = new Size(Width, Height); renderForm.AllowUserResizing = false; }
下一步是向咱們的Game
類添加兩個方法,一個用於啓動渲染/遊戲循環,另外一個用於調用每一個幀的回調方法。這是經過如下代碼完成的:orm
public void Run() { RenderLoop.Run(renderForm, RenderCallback); } private void RenderCallback() { }
咱們傳入咱們的RenderForm
方法和每一個幀調用RenderLoop.Run(…)
方法。對象
咱們如今將爲咱們的Game
類添加一些清理,以確保正確放置對象。因此咱們讓咱們的Game
類實現接口IDisposable
:blog
public class Game : IDisposable { [...] public void Dispose() { renderForm.Dispose(); } }
在這裏,咱們也確保處置咱們的RenderForm
。教程
做爲最後一步,咱們如今將從main方法運行咱們的遊戲。所以,打開「Program.cs」類,它在建立「控制檯應用程序項目」時自動添加,並將Main(…)
方法更改爲如下內容:
[STAThread]
static void Main(string[] args) { using(Game game = new Game()) { game.Run(); } }
由於Game實現IDisposable
它會因using語句而自動正確處理。在此處詳細瞭解其工做原理:https://msdn.microsoft.com/en-us/library/yh598w02.aspx。
如今,若是您運行該程序,您應該看到一個空窗口,其中包含正確的大小和標題欄文本:
這就是本教程的所有內容,在下一部分中,咱們將介紹初始化Direct3D設備並設置交換鏈。