我目前正在尝试在C#中使用monogame和winforms创建一个mapeditor。我正在Windows 7机器上的Visual Studio 2015中工作。我创建了一个winforms项目,然后添加以下参考:MonoGame.Framework,OpenTk和OpenTK.GLControl。然后,我包括了XNA Winforms示例中的以下文件:GraphicsDeviceControl.cs,GraphicsDeviceService.cs和ServiceContainer.cs。完成此操作后,我按照本教程将XNA示例移植到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存储库中的MGWinFormsControls项目中移植的xna示例:github.com/jaquadro/MonoGame-WinFormsControls,结果是“ GraphicsDeviceService.parameters”警告消失了,但我仍然无法得到任何东西除了一个黑色的窗户。
有谁知道我该怎么做才能解决此问题?
提前致谢!
Jaquadro版本仅适用于OpenGL。它基于MonoGame的较早版本,在该版本中可以使用GL + winforms。首席开发人员当前有意禁用此功能,直到另行通知,但DX与之兼容。我已经发布了2个实现此目的的库。
这是基于直接移植到monogame的Xna教程。https://github.com/ArchaicOokami/MonoGame.Framework.Control
这是基于对上述版本的修改。https://github.com/ArchaicOokami/Microsoft.Xna.Framework.Control
在Microsoft Xna Framework Control(基于xna表单控件示例)中,您必须具有3个类。-GraphicsControlDevice-GraphicsDeviceService-服务容器
使用此方法时,您将创建一个新类,继承GraphicsDeviceControl(这又将制作一个UserControl)并修改draw函数以执行您的任务。准备好并将其扔到窗体上之后,这需要每个窗口一个全新的控件(即使它们只是稍有不同),并且需要在代码中调用某个地方以进行绘制。这可以通过将绘图代码添加到Application.Idle或通过在主循环中手动调用绘图来完成。
我的git post中的当前编译版本的目标是.net 4.0,并使用MonoGame 3.4。
使用修改后的库时,您需要做的就是将GraphicsDeviceControl放到窗体上。然后从视觉设计器中添加Draw事件,并在其中添加代码。clearcolor是在调用绘图之前自动完成的,并且可以通过代码或可视设计器进行设置,因为它是一个属性,您可以在“属性”窗口中对其进行修改。为了进行此绘制,您所需要做的就是从视觉设计器中将AutoDraw设置为true或将其设置为false并在循环内部手动调用该绘制。
我的git post中的当前编译版本的目标是.net 4.5,并使用MonoGame 3.5。
这两个都可以在Nuget上找到,方法是搜索ArchaicSoft或git aka中列出的名称-MonoGame.Framework.Control Microsoft.Xna.Framework.Control
为了方便使用和方便,我个人建议为Windows样式表单控件而不是用户控件体验进行修改,但这是您的选择。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句