【问题标题】:Polling equivalent of AllFramesReady event?轮询等价于 AllFramesReady 事件?
【发布时间】:2012-10-28 16:52:26
【问题描述】:

我正在使用带有 XNA Game Studio 4.0 的官方 Kinect SDK 1.6。

我想知道是否有人有一个很好的解决方法,可以一次轮询所有帧,而不是以下:

ColorImageFrame cFrame = _Device.ColorStream.OpenNextFrame(100);
DepthImageFrame dFrame = _Device.DepthStream.OpenNextFrame(100);
SkeletonFrame sFrame = _Device.SkeletonStream.OpenNextFrame(100);

我宁愿不在我的循环中进行三个同步调用。我真的很希望像 _Device.OpenAllFrames(100) 这样的东西,但轮询方法似乎没有等效的 AllFramesReady 事件。

我无法切换到事件驱动方法,因为它并不真正适合 XNA。或者有没有人有更好的方法来访问 XNA 循环内的 Kinect 流?

【问题讨论】:

    标签: xna kinect


    【解决方案1】:

    我建议在 SDK 之上制作您自己的简单 Kinect 管理器(这是我在我的一个项目中所做的)。

    这个管理器可以是一个单例对象,它监听来自深度、颜色和骨架流的事件,并将最新的可用帧保存到一些局部变量中(如果不需要它们,您还可以优化和禁用一些流)

    在您的 XNA 游戏循环中,您可以访问这些变量,您将获得最新的可用帧。需要一些线程同步来防止在管理器写入变量时读取变量。

    除了这个功能,这个管理器还帮我处理了 Kinect 传感器断开/重新连接的情况。管理器对象不是总是测试传感器是否连接,而是始终存在,但它不会在本地存储任何新帧。

    当然,XNA 游戏仍然可以处理断开/连接事件,以防它想要做一些特殊的事情,但在游戏循环中,我不必总是测试是否连接了有效的 kinect 传感器。

    【讨论】:

      猜你喜欢
      • 2012-02-02
      • 2017-01-25
      • 2010-10-25
      • 1970-01-01
      • 2013-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多