0

我们在 VS Express 2012 for Windows Desktop 的 Windows 窗体应用程序中集成了 Flash 游戏 (crazytaxi.swf)。我们正在使用跳跃控制器通过手势来控制游戏。

当我们在 VS2012 中运行项目时会发生什么,游戏正常启动。我们使用手势(左,右等)玩游戏。但一段时间后控制器通过退出其线程停止监听。我们可以在输出窗口中看到。“线程 '' (0x1b50) 已退出,代码为 0 (0x0)。” 这是我们在输出窗口中得到的。

我们不知道如何克服这一挑战。

4

3 回答 3

1

您没有提供足够的信息,但根据我收集的信息,您的 LEAP 线程运行完成并关闭。如果您在函数中声明和初始化侦听器和控制器变量,并且在执行函数时变量超出范围,则可能会发生这种情况。这会导致垃圾收集器在看似随机(不可复制)的时刻同时处理控制器和侦听器。为了解决这个问题,为控制器和监听器创建一个单例——这可以归结为在某个类中简单地定义一个静态控制器和监听器变量。这样,侦听器和控制器对象将永远不会超出范围并被 GC 处理掉。

于 2014-02-09T11:11:21.647 回答
0

我的 WPF 应用程序和 Leap Motion 代码也有同样的问题,但代码在控制台应用程序中运行良好。

在 WPF 中,当我全局声明 Leap-Listener 和控制器对象时,我不再面临错误,并且 Listener 一直处于活动状态。

只需在调用监听器的类(全局)中声明监听器和控制器

公共静态 LeapListener 监听器;

public static Controller controller;

现在使用此侦听器对象,并将其添加到控制器并在函数或构造函数中启用控制器的手势属性。

listener = new LeapListener();
controller.AddListener(listener);
controller = new Controller();

这应该可以解决问题。如果问题仍然存在(检测问题),只需初始化并将相同的侦听器对象添加到控制器对象的 onExit 事件。现在手势和其他属性存在,因为您不再创建控制器的新实例。

于 2013-10-16T06:52:52.777 回答
0

“线程 '' (0x1b50) 以代码 0 (0x0) 退出,基本上说:

ID 为 6992 的线程运行并成功完成了操作。

系统错误代码 (0-499)

在此处输入图像描述

问题是,设备会停止跟踪吗?

这是我的 Leap Motion 应用程序中的 0x0(工作正常):

线程“vshost.NotifyLoad”(0x364) 已退出,代码为 0 (0x0)。线程 '' (0x3348) 以代码 0 (0x0) 退出。线程“vshost.LoadReference”(0x37c8)已退出,代码为 0(0x0)。

另外,附带说明一下,因为它与错误代码无关 - 您是否从控制器中删除了侦听器,然后在应用程序关闭时将它们都处理掉?不正确处理物品会导致问题。

第二个注意事项 - onExit 和 onDisconnet 是两个不同的东西。

onDisconnect(controller:Controller):void 当 Controller 对象与 Leap Motion 软件断开连接时调用。听众

onExit(controller:Controller):void 当此 Listener 对象从 Controller 中移除或 Controller 实例被销毁时调用。

如果有人遇到类似问题,我在查看代码后通过电子邮件发送的回复是:

我查看了代码,因为您只向我发送了几个文件,我不得不注释掉对未包含在 zip 中的类的引用。

该代码在 3 种不同的 Leap Motion 设备上运行良好 - 当我从该方法中注释掉时,我的建议是:

  1. 更新 SDK。我使用了 .Net 4 dll 和最新版本的 SDK,今天是:v.1.0.8.7665

  2. 使用完对象后将其丢弃。使用后处理 Frames,从 Controller 中移除侦听器,并在不再使用设备或关闭应用程序时处理 Controller。

  3. 我注意到他们正在创建一些 Timers 和 DispatcherTimers,但我找不到任何关于它们被使用的地方的引用。这些是用来做什么的?DispatcherTimer 不属于 Windows 窗体应用程序。

我最好的猜测——我讨厌猜测——是存在线程问题,或者对象没有被正确处理——或者您使用的 SDK 版本存在错误。

我在 GitHub 上有两个应用程序 - 随意使用代码。有一个用于 WPF 和一个用于 Windows 窗体 - 两者都需要针对最新的 SDK 进行更新,因为某些东西在更高版本的 SDK 中已被弃用(例如 Screen 类)。

WPF: https ://github.com/IrisClasson/Leap-Motion

Windows 窗体: https ://github.com/IrisClasson/LeapMotion_WinForms_Demo_OLD_SDK

免责声明:我做的不多,如果有任何 WinForms 开发

于 2013-09-04T15:07:10.687 回答