我在 XNA 中有一个预先存在的游戏,不幸的是我丢失了它的关卡编辑器代码。之前它曾经作为单独的 .exe 运行,但我已经完成了修改游戏的工作,以便可以暂停它以在游戏本身中运行关卡编辑器。我想使用 WPF 来实际进行关卡编辑,因为它似乎非常适合这项任务,但我不知道在两个系统之间传递信息的最佳方式。
我的 XNA 游戏生成了一个 WPF 窗口,并且我已经向 XNA 游戏注册了事件,这样当我单击 WPF 窗口上的按钮时,XNA 游戏会收到 ClickEvent 并做出适当的响应。这对于放置除了位置(像雕像之类的东西)之外不需要初始化数据的对象非常有效,我只是直接在 XNA 中解释。但是,现在我的对象包含用户在 WPF 编辑器中定义的更多信息(例如,开始敌人的健康),我不确定将信息路由到 XNA 的最佳方式。我特别想记住,最终,我会想要做到这一点,以便我可以单击游戏中的一个对象以“在线”编辑它(或者至少让使用它的人看起来像这样)关卡编辑器)。所以本质上,我
到目前为止,这是我的想法,但这些都不像我希望的那样直截了当,所以我不确定我是否走在正确的道路上。
- 覆盖 RoutedEventArgs 以包含我需要的额外元数据,这样当事件从 WPF 引发并被 XNA 拾取时,所有额外信息都已经存在。
- 这似乎是一个不错的方法,但是当我想反过来时,它根本没有帮助我。
- 另外,我可能会误解它是如何工作的,但似乎我需要在我的 XNA 游戏中添加一堆通用的 EventHandler 代码,而这对于“雕像”案例来说是不需要的。
- 覆盖 Button 类以附加我需要的额外元数据,然后通过 sender 或 RoutedEventArgs.OriginalSender 访问它
- 这似乎是更简单的方法之一,但感觉有点强迫。这些信息并不真正属于 Button 的一部分。
- 我不确定这将如何将信息从 XNA 传递回 WPF。
- 通过 sender.Parent 或 RoutedEventArgs.OriginalSender.Parent 获取信息,这需要将其转换为适当的 WPF UI 元素。
- 这似乎相对容易,但有点难看。这基本上意味着放置一堆常规的 C# 样式属性,当 ComboBoxes 之类的东西有更改/选择事件时,它们会设置它们的值。
- 这似乎比制作自定义按钮更容易,但我还没有花时间认真研究它。
任何帮助/方向将不胜感激。我也很乐意发布任何相关的代码片段,但游戏非常大,到目前为止 WPF 实现非常基础,所以我不确定什么会有所帮助。