2016-05-12 32 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