在 winform 中使用 monogame
Use monogame with winforms
我目前正尝试在 C# 中使用 monogame 和 winforms 创建一个 mapeditor。我在 Visual Studio 2015 年在 Windows 7 机器上工作。我创建了一个 winforms 项目并添加了以下引用:MonoGame.Framework、OpenTk 和 OpenTK.GLControl。然后我包含了 XNA Winforms Sample: GraphicsDeviceControl.cs, GraphicsDeviceService.cs and ServiceContainer.cs. When this was done I followed this tutorial 中的以下文件以将 XNA 示例移植到 MonoGame。至此一切正常。
然后我创建了这个测试 class 看看它是否有效:
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();
}
}
}
然后我构建了项目,这样 class 就会出现在表单设计器工具箱中。这也很有效,所以我继续将 class 拖到设计器中的表单上。这也显示为正常。然后我再次构建项目,希望我的纹理能够显示出来,但是,我只得到一个黑色 window 和我在设计器中添加的 class 一样大,看这张图: prnt.sc/b33my9(无法制作第三个 link,因为我没有足够的代表)
我还可以提到 Visual Studio 2015 表示 GraphicsDeviceService.cs 中的字段 'GraphicsDeviceService.parameters' 从未使用过。我不知道这是否是我问题的一部分。
我还尝试用这一行替换 Draw 函数中的代码:
GraphicsDevice.Clear(Color.Blue);
但我还是得到了同样的黑色window。
我还尝试了位于此 gitub 存储库中的 MGWinFormsControls 项目中的移植 xna 示例:github.com/jaquadro/MonoGame-WinFormsControls 结果是 'GraphicsDeviceService.parameters' 警告消失了但我仍然无法得到任何东西,除了黑色 window.
有谁知道我应该如何解决这个问题?
提前致谢!
Jaquadro 版本仅适用于 OpenGL。它基于旧版本的 MonoGame,其中 GL + winforms 是可能的。首席开发人员目前有意禁用此功能,直至另行通知,但 DX 与它兼容。我有 posted 2 个库来完成这个。
这是基于直接移植到 monogame 的 Xna 教程。
https://github.com/ArchaicOokami/MonoGame.Framework.Control
这个是基于对上面版本的修改。
https://github.com/ArchaicOokami/Microsoft.Xna.Framework.Control
在 Microsoft Xna Framework 控件中 - 基于 xna 表单控件示例 - 你必须有 3 个 classes。
- 图形控制设备
- 图形设备服务
- 服务容器
使用它时,您将创建一个新的 class,继承 GraphicsDeviceControl(这又是一个 UserControl)并修改绘制函数以执行您的任务。准备好并将其扔到表单上后,每个 window 需要一个全新的控件(即使它们只是略有不同)以及调用代码中的某处进行绘制。这可以通过将绘图代码添加到 Application.Idle 或通过在主循环中手动调用绘图来完成。
我的 git post 中的当前编译版本是针对 .net 4.0 并使用 MonoGame 3.4。
在使用我修改过的库时,MonoGame Framework Control 您需要做的就是将一个 GraphicsDeviceControl 放到您的窗体上。然后从可视化设计器添加 Draw 事件并在那里添加代码。 clearcolor 在调用 draw 之前自动完成,并且可以通过代码或可视化设计器进行设置,因为它是一个 属性,您可以从属性 window 进行修改。为了使这一次绘制,您所要做的就是从视觉设计器中将 AutoDraw 设置为 true 或将其设置为 false 并在循环内手动调用绘制。
我的 git post 中的当前编译版本是针对 .net 4.5 并使用 MonoGame 3.5。
这两个也可以通过搜索 ArchaicSoft 或它们在 git 中列出的名称在 Nuget 上找到,又名 -
MonoGame.Framework.Control
Microsoft.Xna.Framework.Control
就个人而言,为了易用性和方便性,我推荐我为 Windows 样式表单控件而不是用户控件体验修改的那个,但这是您的选择。
我目前正尝试在 C# 中使用 monogame 和 winforms 创建一个 mapeditor。我在 Visual Studio 2015 年在 Windows 7 机器上工作。我创建了一个 winforms 项目并添加了以下引用:MonoGame.Framework、OpenTk 和 OpenTK.GLControl。然后我包含了 XNA Winforms Sample: GraphicsDeviceControl.cs, GraphicsDeviceService.cs and ServiceContainer.cs. When this was done I followed this tutorial 中的以下文件以将 XNA 示例移植到 MonoGame。至此一切正常。
然后我创建了这个测试 class 看看它是否有效:
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();
}
}
}
然后我构建了项目,这样 class 就会出现在表单设计器工具箱中。这也很有效,所以我继续将 class 拖到设计器中的表单上。这也显示为正常。然后我再次构建项目,希望我的纹理能够显示出来,但是,我只得到一个黑色 window 和我在设计器中添加的 class 一样大,看这张图: prnt.sc/b33my9(无法制作第三个 link,因为我没有足够的代表) 我还可以提到 Visual Studio 2015 表示 GraphicsDeviceService.cs 中的字段 'GraphicsDeviceService.parameters' 从未使用过。我不知道这是否是我问题的一部分。 我还尝试用这一行替换 Draw 函数中的代码:
GraphicsDevice.Clear(Color.Blue);
但我还是得到了同样的黑色window。 我还尝试了位于此 gitub 存储库中的 MGWinFormsControls 项目中的移植 xna 示例:github.com/jaquadro/MonoGame-WinFormsControls 结果是 'GraphicsDeviceService.parameters' 警告消失了但我仍然无法得到任何东西,除了黑色 window.
有谁知道我应该如何解决这个问题?
提前致谢!
Jaquadro 版本仅适用于 OpenGL。它基于旧版本的 MonoGame,其中 GL + winforms 是可能的。首席开发人员目前有意禁用此功能,直至另行通知,但 DX 与它兼容。我有 posted 2 个库来完成这个。
这是基于直接移植到 monogame 的 Xna 教程。 https://github.com/ArchaicOokami/MonoGame.Framework.Control
这个是基于对上面版本的修改。 https://github.com/ArchaicOokami/Microsoft.Xna.Framework.Control
在 Microsoft Xna Framework 控件中 - 基于 xna 表单控件示例 - 你必须有 3 个 classes。 - 图形控制设备 - 图形设备服务 - 服务容器
使用它时,您将创建一个新的 class,继承 GraphicsDeviceControl(这又是一个 UserControl)并修改绘制函数以执行您的任务。准备好并将其扔到表单上后,每个 window 需要一个全新的控件(即使它们只是略有不同)以及调用代码中的某处进行绘制。这可以通过将绘图代码添加到 Application.Idle 或通过在主循环中手动调用绘图来完成。
我的 git post 中的当前编译版本是针对 .net 4.0 并使用 MonoGame 3.4。
在使用我修改过的库时,MonoGame Framework Control 您需要做的就是将一个 GraphicsDeviceControl 放到您的窗体上。然后从可视化设计器添加 Draw 事件并在那里添加代码。 clearcolor 在调用 draw 之前自动完成,并且可以通过代码或可视化设计器进行设置,因为它是一个 属性,您可以从属性 window 进行修改。为了使这一次绘制,您所要做的就是从视觉设计器中将 AutoDraw 设置为 true 或将其设置为 false 并在循环内手动调用绘制。
我的 git post 中的当前编译版本是针对 .net 4.5 并使用 MonoGame 3.5。
这两个也可以通过搜索 ArchaicSoft 或它们在 git 中列出的名称在 Nuget 上找到,又名 - MonoGame.Framework.Control Microsoft.Xna.Framework.Control
就个人而言,为了易用性和方便性,我推荐我为 Windows 样式表单控件而不是用户控件体验修改的那个,但这是您的选择。