SharpDX初學者教程第2部分:創建窗口
原文 http://www.johanfalk.eu/blog/sharpdx-tutorial-part-2-creating-a-window
在第二篇教程中,我們將介紹如何創建一個稍後將呈現的簡單窗口。
-
首先,我們將創建一個名為的新類
Game
。右鍵單擊項目並選擇“添加 - >類...”,將文件命名為“Game.cs”。 -
首先,我們將類
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 。 -
接下來,我們將構造函數添加到
Game
創建RenderForm 的類中。我們還需要添加一個引用System.Drawing
。我們還將設置標題並禁止用戶調整窗口大小。using System.Drawing; [...] public Game() { renderForm = new RenderForm("My first SharpDX game"); renderForm.ClientSize = new Size(Width, Height); renderForm.AllowUserResizing = false; }
-
下一步是向我們的
Game
類添加兩個方法,一個用於啟動渲染/遊戲循環,另一個用於調用每個幀的回調方法。這是通過以下代碼完成的:public void Run() { RenderLoop.Run(renderForm, RenderCallback); } private void RenderCallback() { }
我們傳入我們的RenderForm
方法和每個幀調用RenderLoop.Run(…)
方法。 -
我們現在將為我們的
Game
類添加一些清理,以確保正確放置對象。所以我們讓我們的Game
類實現接口IDisposable
: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設備並設置交換鏈。
SharpDX初學者教程第2部分:創建窗口