XNA但不是游戏

时间:2012-05-14 21:16:39

标签: xna xna-4.0

我在制作一个节目。但是,我可以使用XNA而不是使用大量的后台工作者和线程来更新UI吗?它是一个应用程序,因此不会部署到te XBox。

我理解不使用WinForms和WPF控件的限制,但这不会是一个问题,因为我可以快速编写我需要的唯一控件,一个滑块。

3 个答案:

答案 0 :(得分:3)

你的问题有点不清楚,但希望这可以回答:

是的,你绝对可以使用XNA。在没有Game类的情况下这样做有点烦人,因为使用XNA的Content系统加载图形资源需要了解Graphics设备(这一切都隐藏在Game的实现中)。基本上你必须实现你自己的IServiceProvider(几乎只是一个类型到对象的字典),XNA的内容系统将使用它来获取IGraphicsDeviceService,你也必须在管理图形的任何对象上实现它(我们称之为GrahpicsManager,真正原创:P)。在GraphicsManager上,您只需创建一个PresentationParameters对象,填写您要设置的所有参数(包括您的窗口或控件句柄和大小),然后使用它来创建GraphicsDevice。请注意,IGraphicsDeviceService接口要求您调用一些事件(例如,当您完成图形设备的创建,或设备丢失等时)。

这是我自己的IServiceProvider实现(你基本上只是实例化其中一个并在任何地方共享它):

http://pastebin.com/1gX7v5b4

确保在创建IGraphicsDeviceService后将其添加到该服务提供商。我还削减了我对图形服务的实现,以便你可以检查出来。请注意,您需要添加自己的Draw方法,该方法实际使用GraphicsDevice,并在最后调用GraphicsDevice.Present。

http://pastebin.com/wBvDiWBu

请参阅第36行,了解我将自己添加到服务容器的位置,以及第73行,了解我设置图形设备的位置(请注意,安装程序将为其将绘制的窗口句柄采用IntPtr)。

你也可以使用游戏实际制作应用程序,但它非常烦人,因为游戏接管你的主循环(通常这意味着你必须负责推动自己在更新内部的Windows消息泵,我已经尝试过了,它糟透了。)

无论如何,希望能回答你的问题!

答案 1 :(得分:0)

虽然Xna主要用于游戏,但我相信你可以将它用于一个应用程序,如果你真的想要很多图形和其他你可以在游戏中找到的东西。我没有尝试过多的音频,但我相信有一些方法可以为你的DJ应用程序“混合”它。试验它,看看它是否符合您的期望。如果您需要的不仅仅是滑块,还可以使用Neoforce Controls(http://neoforce.codeplex.com/)轻松创建其他控件。

答案 2 :(得分:0)

对于DJ应用程序,我不建议使用XNA。它的音频支持非常有限,在尝试向后播放曲目等时会出现问题。此外,如果没有正确预加载,加载资源(音频文件)可能需要一些时间,我认为这对于体面的DJ库来说会很复杂。

您可能不得不使用背景库进行音频管理和播放,但我不确定它会有多容易。考虑到XNA在访问音频子系统时所施加的限制,我还认为加载和播放外部音频文件可能是一个挑战。