gpt4 book ai didi

c# - 带有 Windows 窗体的 XNA - 打开新窗口

转载 作者:太空狗 更新时间:2023-10-29 22:01:23 26 4
gpt4 key购买 nike

好的,我们开始吧。我正在尝试制作一个应用程序,因为它的渲染器而使用 XNA 作为基础。在该项目中需要做的一件事是打开一个新窗口(作为对话框),其中嵌入了一个单独的 XNA 渲染面板。我将其用作交互式预览面板,因此我绝对需要 XNA 来呈现其中。然而,似乎 XNA 并没有很好地完成这项工作。我自己尝试了各种方法,但都无济于事(要么产生错误但渲染不正确,要么以错误的宽高比渲染,等等)。通常,我会在这里发布代码,但由于我运气不佳,因此没有太多可发布的内容。

我的应用程序目前包含一个嵌入在窗体中的 XNA 应用程序,我有一个按钮可以打开预览面板,理论上它应该作为一个包含 XNA 渲染器的窗体对话框弹出,以允许我绘制预览.我已经尝试了几个小时,但一无所获,所以我在这里寻求一些帮助。

谢谢,无论如何。

编辑:好的,我取得了一些进展,但我有两个问题。首先,使用 sprite 批处理绘制的任何纹理都显示出正确的尺寸,但填充为纯黑色。此外,当我打开对话框然后关闭它并关闭应用程序时,我得到一个 AccessViolationException。我强烈怀疑这两个错误以某种方式关联。

这是我初始化预览对话框的代码。 (a 是一个自定义类,基本上由 Texture2D 对象的 LinkedList 组成)。

 animPrev = new AnimationPreview(a);
animPrev.Show();

我的 AnimationPreview 类是 Form 类的扩展,包含一个 PreviewControl 对象,它是 XNA Winforms 示例中的 GraphicsDeviceControl 的扩展。请注意,出于各种原因,我的主窗体扩展了 XNA Game 类。

PreviewControl 对象是这样设置的:

protected override void Initialize()
{
sb = new SpriteBatch(GraphicsDevice);
Application.Idle += delegate { Invalidate(); };
}

Draw 方法包含:

protected override void Draw()
{
GraphicsDevice.Clear(Microsoft.Xna.Framework.Graphics.Color.Violet);
if (frame != null)
{
sb.Begin();
sb.Draw(Image, Vector2.Zero, Color.White);
sb.End();
}
}

如预期的那样,这会清除表单 violet 的背景,并绘制一个与 Image 大小相同的黑框。这不是预期的。希望有人能帮我解决这个问题。

注意:一个可接受的替代方法是将 XNA Texture2D 对象转换为 System.Drawing.Image 对象。但是,我使用的是 XNA 3.1,所以我不能只将纹理保存到流中并重新加载它。其实试过之后,有点狡猾,而且很慢,所以我宁愿不这样做。

最佳答案

您是否看过以下官方教程/示例?

他们应该解释我认为的一切。您甚至可以找到示例的可下载源。

关于c# - 带有 Windows 窗体的 XNA - 打开新窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12764544/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com