2012-01-05 82 views
3

我有一個簡單的XNA 4.0遊戲編寫。我想創建一個Windows Form用戶控件來渲染這個遊戲,並將必要的交互反饋(鍵盤和鼠標)提供給XNA。在Windows窗體用戶控件中嵌入XNA遊戲

我曾嘗試以下:

在XNA:

  • 重定向XNA的Game.GraphicsDevice到RenderTarget2D。

  • 發出事件發送帶有KeyboardState和MouseState的目的是通過Windows窗體填寫,在更新()

的開始的WinForms:

  • 捕獲事件,使用Windows窗體中通常的鍵盤和鼠標事件獲取的數據填充KeyboardState和MouseState。

  • 在OnPaint中,調用Game.RunOnFrame()

  • 獲取從遊戲RenderTarget2D(如紋理)。

  • 鎖定紋理的數據,並嘗試在我的用戶控件的圖形中逐像素地繪製它。

  • 另一個想法是隻是調用Game.Run()(一個新的線程),並在遊戲中發送一個事件發送RenderTarget2D。

我發現了以下問題:

  • 如果我叫Game.Run()我沒有辦法隱藏遊戲窗口(這似乎黑色,因爲我重定向渲染)

  • Game.Run()必須在不同的線程上調用,因爲它啓動了一個新的事件循環(它調用Application方法),然後我從用戶控件中創建一個不同的線程(壞,壞)

  • 鎖定的色彩搭配,一個的Vector4 RenderTarget2D,甚至RGBA32似乎並不爲我工作(它說:「錯了結構尺寸」)

任何想法?

在此先感謝。

+1

愚蠢的問題 - 你爲什麼要這麼做? – RQDQ 2012-01-05 18:25:10

+1

我認爲本教程和代碼示例完全涵蓋了您想要執行的操作:http://create.msdn。com/en-US/education/catalog/sample/winforms_series_1 – 2012-01-05 18:57:51

+1

@RQDQ我認爲這是一篇不太深思熟慮的評論。我可以想出一個你可能希望在winform中嵌入xna遊戲的原因:創建關卡編輯器。 – annonymously 2012-01-05 21:44:51

回答

5

在xna的網站上有一個關於在winform中嵌入xna的偉大代碼示例。它會帶您完成所有步驟。我爲xbox製作遊戲,但是我將它用於我們爲我們的引擎製作的關卡編輯器。

http://xbox.create.msdn.com/en-US/education/catalog/sample/winforms_series_1

+0

非常感謝,真的很有幫助。 – 2012-04-04 19:46:02

+2

雖然這可能在理論上回答這個問題,[這將是更可取的](http://meta.stackexchange.com/q/8259)在這裏包括答案的基本部分,並提供參考鏈接。 – 2013-01-19 14:21:28