在 Windows 窗体用户控件中嵌入 XNA 游戏

2024-02-05

我写了一个简单的 XNA 4.0 游戏。我想制作一个 Windows 窗体用户控件来渲染此游戏,并向 XNA 提供必要的交互反馈(键盘和鼠标)。

我已经尝试过以下方法:

In XNA:

  • 将 XNA 的 Game.GraphicsDevice 重定向到 RenderTarget2D。

  • 在 Update() 开头发出一个事件,发送一个带有 KeyboardState 和 MouseState 的对象,由 Windows 窗体填充

在 WinForm 中:

  • 捕获事件,用 Windows 窗体中常见的键盘和鼠标事件获取的数据填充 KeyboardState 和 MouseState。

  • 在 OnPaint 上,调用 Game.RunOnFrame()

  • 从游戏中获取 RenderTarget2D(作为纹理)。

  • 锁定纹理的数据,并尝试在我的用户控件的图形中逐像素地绘制它。

  • 另一个想法是调用 Game.Run()(一个新线程)并在发送 RenderTarget2D 的 Game 中发出一个事件。

我发现存在以下问题:

  • 如果我调用 Game.Run() 我无法隐藏游戏的窗口(它显示为黑色,因为我正在重定向渲染)

  • Game.Run() 必须在不同的线程上调用,因为它启动一个新的事件循环(它调用应用程序方法),然后我从创建它的不同线程在用户控件中进行绘制(坏,坏)

  • 使用 Color、Vector4 甚至 Rgba32 锁定 RenderTarget2D 似乎对我不起作用(它说“结构大小错误”)

有任何想法吗?

提前致谢。


xna 的网站上有一个关于在 winform 中嵌入 xna 的很棒的代码示例。它会引导您完成所有步骤。我为 Xbox 制作游戏,但我将其用于我们为引擎制作的关卡编辑器。

http://xbox.create.msdn.com/en-US/education/catalog/sample/winforms_series_1 http://xbox.create.msdn.com/en-US/education/catalog/sample/winforms_series_1

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Windows 窗体用户控件中嵌入 XNA 游戏 的相关文章

随机推荐

  • 用户点击时使用ajax加载processing.js sketch

    我正在尝试通过单击 ajax 加载processing js 草图 但它不起作用 如果我立即加载草图 它会起作用 但不会在用户交互时加载 这是我的代码 clicker click function var canvasRef
  • 避免 Google Apps 脚本中出现 formatDate 错误

    我有一个函数可以存储在数组中并循环文档中的数据 在这个里面 有一些单元格的日期格式为 dd mm yyyy 但是当我通过电子邮件发送它时 看起来像2014 年 1 月 1 日星期三 00 00 00 GMT 0300 ART 我在这个函数内
  • IA-64 上出现段错误,但 IA-32 上没有

    我无法访问我的原始账户 https stackoverflow com users 211631 whacko cracko 如果可能的话 请版主合并帐户 这是我的问题 以下 C 程序在 IA 64 上出现段错误 但在 IA 32 上运行良
  • 使用 AngularJS 日期过滤器和 UTC 日期

    我有一个以毫秒为单位的 UTC 日期 我将其传递给 Angular 的日期过滤器以进行人工格式化 someDate date d MMMM yyyy 太棒了 除了someDate采用 UTC 时间 并且日期过滤器认为它是当地时间 我如何告诉
  • String(value) 与 value.toString() 有什么区别

    Javascript 在类型和类型转换方面有很多 技巧 所以我想知道这两种方法是否相同 或者是否存在某些特殊情况使它们不同 它们并不完全相同 实际上 作为函数调用的 String 构造函数 http bclary com 2004 11 0
  • Android:打开指定多个收件人的短信活动[重复]

    这个问题在这里已经有答案了 我正在尝试通过启动意图来启动手机短信提供商 我下面使用的代码是我用来启动意图的代码 Intent sendIntent new Intent Intent ACTION VIEW StringBuilder ur
  • 我应该在 git 别名脚本中使用 `sh -c \"...\"` 或 `"!f() {... ; }; f" 吗?

    我已经开始尝试编写带参数的 git 别名了 我见过一些人运行 shell 脚本 alias shAlias sh c 和其他运行函数 alias fAlias f f 看起来 一旦我加快了 Bash 的速度 这还不是我现在的状态 我想要做的
  • 在清单中声明 Google api 密钥(对于 youtube API)

    使用地图 API 我可以在清单中声明我的密钥
  • 部署的 Azure Function (v2) 未运行

    我有一个 Azure Function v2 可以在本地运行 部署到 Azure 后 一切似乎都正常 包含二进制文件的 bin 文件夹和包含 function json 的函数名称文件夹 但是 当我检查它们是否运行 查看日志 时 它们不在监
  • JavaScript 中的 DOM 解析

    一些背景 我正在使用 JavaScript 开发一个基于 Web 的移动应用程序 HTML 渲染基于 Safari 跨域策略已禁用 因此我可以使用 XmlHttpRequests 调用其他域 这个想法是解析外部 HTML 并获取特定元素的文
  • 使用 Haskell 输入数据

    背景故事 为了更好地理解 Haskell 和函数式编程 我给自己布置了一些作业 我的第一个任务是编写一个程序 可以查看数据集 一组数字 博客中的单词等 搜索模式或重复 对它们进行分组并报告它们 听起来很容易 Question 我希望程序首先
  • SELECT ... ORDER BY xxx LIMIT 1 FOR UPDATE 将锁定多少行?

    我有一个具有以下结构的查询 SELECT WHERE status QUEUED ORDER BY position ASC LIMIT 1 FOR UPDATE 这是 InnoDB 表上的单表 SELECT 语句 场地position I
  • 将 onBlur 与 JSX 和 React 结合使用

    我正在尝试创建一个密码确认功能 仅在用户离开确认字段后才呈现错误 我正在使用 Facebook 的 React JS 这是我的输入组件
  • XSLT 1.0 金额字段必须至少有 2 位小数

    我有两个 xml 有一个金额字段 可以包含 54 2 54 23 54 234 54 234567 等值 有人请告诉我如何确保输出 xml 中至少出现两位小数 当前 54 2 转换为 54 2 但我希望它是 54 20 您可以使用 form
  • 我可以使用没有 getter 和 setter 的 mvc 吗?

    如果我不想公开对象的状态 但仍然需要显示它 例如 以 HTML XML 或 JSON 的形式 我将如何在 MVC 环境中做到这一点 使用导出方法来导出简化的不可变对象 如果愿意的话 可以称为 数据类 是否有意义 添加与接口对话的渲染方法怎么
  • python 属性重载运算符

    是否可以重载 python 属性上的运算符 就像是 class Foo object property def bar self return unfoobar self bar bar setter def bar self baz se
  • 在分析代码时是否应该使用匹配的 (gcc) 编译器优化标志?

    我在用 O3 http linux die net man 1 g 编译代码时 现在我需要对其进行分析 对于分析 我遇到了两个主要选择 valgrind tool callgrind http valgrind org docs manua
  • 当使用position:fixed时是否可以保持父元素的宽度?

    当我们申请时position fixed到一个元素 它被采取脱离正常流动 http quirksmode org css css2 position html link7文档的宽度 因此它不尊重其父元素的宽度 有没有办法让它继承父级的宽度如
  • writeHTMLCell() 之后的 TCPDF Write() 不会显示任何内容

    我使用后 pdf gt writeHTML 同一页面上不显示任何内容 如果我使用 pdf gt AddPage 然后用文字写成 pdf gt Write 再次显示 为什么 我应该怎么做才能在同一页上写字 html table table p
  • 在 Windows 窗体用户控件中嵌入 XNA 游戏

    我写了一个简单的 XNA 4 0 游戏 我想制作一个 Windows 窗体用户控件来渲染此游戏 并向 XNA 提供必要的交互反馈 键盘和鼠标 我已经尝试过以下方法 In XNA 将 XNA 的 Game GraphicsDevice 重定向