C# 使用winforms的单游戏

C# 使用winforms的单游戏,c#,winforms,monogame,opentk,C#,Winforms,Monogame,Opentk,我目前正在尝试使用C#中的monogame和winforms创建地图编辑器。我在Visual Studio 2015的Windows 7机器上工作。我创建了一个winforms项目,并添加了以下引用:MonoGame.Framework、OpenTk和OpenTk.GLControl。然后,我从中包括了以下文件:GraphicsDeviceControl.cs、GraphicsDeviceService.cs和ServiceContainer.cs。完成后,我将XNA示例移植到MonoGame。

我目前正在尝试使用C#中的monogame和winforms创建地图编辑器。我在Visual Studio 2015的Windows 7机器上工作。我创建了一个winforms项目,并添加了以下引用:MonoGame.Framework、OpenTk和OpenTk.GLControl。然后,我从中包括了以下文件: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();
        }
    }
}
但我还是有同样的黑色窗户。 我也在gitub repo中的MGWinFormsControl项目中尝试了移植的xna示例:结果是“GraphicsDeviceService.parameters”警告消失了,但除了一个黑色窗口之外,我仍然无法获得任何东西

有人知道我该怎么做才能解决这个问题吗


提前谢谢

Jaquadro版本仅适用于OpenGL。它基于较早版本的MonoGame,其中GL+winforms是可能的。首席开发人员目前有意禁用此功能,直到另行通知,但DX与之兼容。我已经发布了两个实现这一点的库

这是基于直接移植到monogame的Xna教程。

此版本基于对上述版本的修改。

在MicrosoftXNA框架控件中(基于Xna表单控件示例),必须有3个类。 -图形控制设备 -图形设备服务 -服务容器

使用此选项时,您将创建一个新类,继承GraphicsDevicontrol(它将生成一个UserControl)并修改draw函数以执行任务。准备好后,将其放到窗体上,这需要每个窗口都有一个全新的控件(即使它们只是略有不同),并调用代码中的某个地方进行绘制。这可以通过将绘图代码添加到Application.Idle或在主循环中手动调用绘图来完成

我的git帖子中当前的编译版以.NET4.0为目标,使用Monogame3.4

在使用我修改过的库时,MonoGame框架控件只需在窗体上放置一个GraphicsDeviceControl。然后从VisualDesigner中添加Draw事件,并在其中添加代码。clearcolor在调用draw之前自动完成,可以通过代码或可视化设计器进行设置,因为它是可以从“属性”窗口修改的属性。为了绘制这张图,您所要做的就是从可视化设计器中将AutoDraw设置为true,或者将其设置为false,然后在循环内部手动调用该图

我的git帖子中当前的编译版以.NET4.5为目标,使用Monogame3.5

通过搜索ArchaicSoft或git中列出的名称,也可以在Nuget上找到这两个名称- 单游戏。框架。控制 Microsoft.Xna.Framework.Control


就我个人而言,为了便于使用和方便,我建议使用我修改过的Windows样式窗体控件,而不是用户控件体验,但这是您的选择。

谢谢!经过大量的研究和麻烦之后,它终于开始工作了:数据链接被破坏,存储库似乎被破坏gone@MGZero是的,我道歉:(我停止使用ArchaicOokami这个名字,或者在MonoGame上做任何事情,因为主要的问题被故意忽略了,因为他们没有足够重视这些问题,或者他们会修复一些问题,然后立即同时更改一堆东西,所以所有的兼容性都被破坏了,同时又出现了新的问题……所以我只是删除了它,因为它在水中是死api。@DamienGibson lol现在不用担心。Monogame开始给我带来很多问题,我干脆停止使用它。@MGZero你用什么来代替它?
GraphicsDevice.Clear(Color.Blue);