2016-05-12 33 views
2

我目前正在嘗試在C#中使用monogame和winforms創建一個mapeditor。我正在使用Windows 7機器上的Visual Studio 2015。我創建了一個winforms項目,並添加了以下參考:MonoGame.Framework,OpenTk和OpenTK.GLControl。然後我包含了XNA Winforms Sample的以下文件:GraphicsDeviceControl.cs,GraphicsDeviceService.cs和ServiceContainer.cs。完成此操作後,我沿着this tutorial將XNA Sample移植到MonoGame。這一切都有效。用winforms使用monogame

然後我創造了這個測試類,看看它的工作原理:

using Microsoft.Xna.Framework; 
using Microsoft.Xna.Framework.Content; 
using Microsoft.Xna.Framework.Graphics; 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace TileMapEditor 
{ 
    class Test : GraphicsDeviceControl 
    { 
     ContentManager content; 
     SpriteBatch spriteBatch; 
     Texture2D t; 

     protected override void Initialize() 
     { 
      content = new ContentManager(Services, "Content"); 
      spriteBatch = new SpriteBatch(GraphicsDevice); 

      t = content.Load<Texture2D>("Gameplay/Player"); 
     } 

     protected override void Draw() 
     { 
      spriteBatch.Begin(); 
      spriteBatch.Draw(t, new Rectangle(10, 10, t.Width, t.Height), Color.White); 
      spriteBatch.End(); 
     } 
    } 
} 

然後我建項目,使這個類將在窗體設計工具箱顯示出來。這也起到了作用,所以我繼續在設計器中將這個類拖到表單上。這也是正常的。然後我再次構建了這個項目,並希望我的紋理能夠顯示出來,然而,我只有一個黑色的窗口和我在設計器中添加的類一樣大,看到這張圖片:prnt.sc/b33my9(自從我創建第三個鏈接後沒有足夠的代表) 我還可以提到Visual Studio 2015說GraphicsDeviceService.cs中的字段'GraphicsDeviceService.parameters'從不使用。我不知道這是否是我的問題的一部分。 我也試圖與這條線,以取代在Draw函數我的代碼:

GraphicsDevice.Clear(Color.Blue); 

,但我仍然得到了同樣的黑色窗口。 我也嘗試了位於此gitub repo中的MGWinFormsControls項目中的移植的xna示例:github.com/jaquadro/MonoGame-WinFormsControls,結果是'GraphicsDeviceService.parameters'警告消失了,但除黑色窗口外,我仍無法獲取任何內容。

有沒有人知道我應該怎麼做才能解決這個問題?

在此先感謝!

回答

1

Jaquadro版僅適用於OpenGL。它基於可以使用GL + winforms的較舊版本的MonoGame。頭部開發人員目前正在使用此功能,直到進一步通知,但DX與其兼容。我已經發布了2個庫來完成這個任務。

這是基於Xna教程直接導入monogame。 https://github.com/ArchaicOokami/MonoGame.Framework.Control

這是一個基於對上述版本的修改。 https://github.com/ArchaicOokami/Microsoft.Xna.Framework.Control

在Microsoft Xna Framework Control中 - 基於xna窗體控件示例 - 您必須擁有3個類。 - GraphicsControlDevice - GraphicsDeviceService - 服務容器

當使用此您將創建一個新的類,繼承GraphicsDeviceControl(這又是一個讓用戶控件)和修改繪製函數來執行你的任務。準備完畢後將它扔到窗體上,這需要每個窗口都有一個全新的控件(即使它們只是略有不同),並且可以調用代碼中的某個地方進行繪製。這可以通過將繪圖代碼添加到Application.Idle,或通過手動調用主循環內的繪圖來完成。

我git文章中的當前編譯版本是針對.net 4.0並使用MonoGame 3.4。

使用我修改過的庫時,MonoGame Framework Control只需將GraphicsDeviceControl放到窗體上。然後從可視化設計器添加Draw事件並在其中添加代碼。 clearcolor是在調用draw之前自動完成的,並且可以通過代碼或可視化設計器進行設置,因爲它是可以從Properties窗口修改的屬性。爲了使這個繪製所有你需要做的是從視覺設計器設置AutoDraw爲true或將其設置爲false並手動調用循環內的繪製。

我git文章中的當前編譯版本是針對.net 4.5並使用MonoGame 3.5。

這兩種也可以通過搜索ArchaicSoft或他們被列爲又名git的名字上的NuGet發現 - MonoGame.Framework.Control Microsoft.Xna.Framework.Control

親自爲便於使用+方便,我推薦我修改爲Windows風格的表單控件,而不是用戶控件的體驗,但這是你的選擇。

+0

謝謝!它經過大量研究和麻煩終於在工作:D – TS1997

+0

鏈接被破壞,版本庫似乎不存在 – MGZero