如何在WinForm專案中呼叫DirectX諸多問題解決方案彙總!
最近想在WinForm上呼叫Directx來渲染繪圖,結果遇到了以下這些問題,經過一段時間的嘗試這些問題已經得到解決,特此與大家一起分享以下經驗!
首先我們來講講整個的正常思路,最後會在下面講解在呼叫Directx過程中出現的一些問題及其解決方案!
筆者的電腦及其開發的相關環境: Win8.1 使用Visual Studio 2013 版本
一、 新建WinForm窗體。
二、點選選單欄--->專案--->新增引用--->找你所呼叫的Directx相關引用,然後在所選引用名前“打勾”點選確定完成引用!
這裡對一些所用到的引用做一些介紹,根據需求大家可以自己選,以上圖是筆者一開始所需的所以沒有新增完全
這裡只介紹常用的
Microsoft.DirectX包含DX所必須的引用,包含一些公共類和數學相關
Microsoft.DirectX.Direct3D支援3D圖形
Microsoft.DirectX.Direct3DX支援3D圖形
Microsoft.DirectX.DirectDrawDDraw,屬於DX9版本前的東西了不需要也罷
Microsoft.DirectX.DirectPlay多玩家遊戲的,與網路程式設計相關,一些API。
Microsoft.DirectX.DirectSoundDSound 播放音效
Microsoft.DirectX.DirectInputDInput 遊戲相關操作的輸入, 滑鼠鍵盤事件啥的
Microsoft.DirectX.AudioVideoPlayback多媒體相關,播放視訊和音訊</span>
三、當我們完成第二步之後開始Using這些引用了
一般情況下我們都必須引用以下三個
Microsoft.DirectX
Microsoft.DirectX.Direct3D
Microsoft.DirectX.Direct3DX
然後開始Using 這裡只需要以下2個就行了,看程式碼
四、接著開始初始化DirectX裝置,筆者選擇在遊戲Form的初始化之後初始化DirectX
</pre><pre name="code" class="csharp">public partial class GameForm : Form { //類全域性變數宣告 Device g_pd3dDevice = null;<span style="white-space:pre"> </span>//D3D裝置建立 public GameForm() { InitializeComponent(); InitD3D_Device();<span style="white-space:pre"> </span>//D3D裝置初始化函式 } private void InitD3D_Device() { try { PresentParameters presentParams = new PresentParameters();<span style="white-space:pre"> </span> presentParams.Windowed = true;<span style="white-space:pre"> </span>//窗體形式渲染 presentParams.SwapEffect = SwapEffect.Discard; g_pd3dDevice = new Device(0, DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing, presentParams);<span style="white-space:pre"> </span>//建立裝置 } catch(DirectXException e)<span style="white-space:pre"> </span>//捕捉建立異常 { MessageBox.Show(e.ToString(), "ERROR", MessageBoxButtons.OK); this.Close(); } } }
五、當我們完成以上步驟之後,我們的WinForm專案 已經跟DirectX融為一體了接著我們將會講如何在WinForm介面中使用Sprite來渲染圖片
//電腦沒電了。接下來會馬上更新
1:我電腦安裝了Directx SDK 為什麼在 Visual Studio的選單欄-->新增引用 裡面沒有發現DX相關的引用?
解決方案: 這是由於系統盤 C:\Program Files\Reference Assemblies\Microsoft\VSTO40 下沒有DX先關的引用檔案。
所以我們要到 C:\Windows\Microsoft.NET\DirectX for Managed Code\1.0.2902.0 檔案下找到DX的相關dll檔案
這個時候只需要把C:\Windows\Microsoft.NET\DirectX for Managed Code\1.0.2902.0
檔案拷貝到C:\Program Files\Reference Assemblies\Microsoft\VSTO40 下,重新返回Visual Studio 開啟新增引用即可看見DX相關引用
當然你也可以選擇 不拷貝,直接通過 新增引用介面 的 “瀏覽按鈕”直接訪問
C:\Windows\Microsoft.NET\DirectX for Managed Code\1.0.2902.0 資料夾。手動匯入並打勾確定新增引用。
新增引用成功後。別忘了在專案所需DX的地方Using 相關的檔案哦。
2:我匯入DX引用並執行之後,編譯並執行程式時程式碼報錯
解決方案: 這是由於你的系統是64位的,你需要在配置管理器中新增一個X86的平臺
選擇X86的平臺,然後返回專案確認 DEBUG平臺為 X86這個時候在此編譯執行,有些機子可以通過,但是有些機子依然還是無法通過。
為什麼呢?
這是因為在 工程目錄下 App.config 檔案中的程式碼不相容所致將App.config 程式碼改成以下程式碼
<?xml version="1.0"?>
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
</startup>
</configuration>
最後點選編譯並執行,這個時候就可以發現 一個融合了DirectX的視窗終於可以運行了