1. 程式人生 > >如何在WinForm專案中呼叫DirectX諸多問題解決方案彙總!

如何在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的視窗終於可以運行了