主题说明了一切:
JavaScript应用程序如何检测Leap Motion设备是否已连接。
将Leap Motion设备从一台计算机移动到另一台计算机非常容易,如果当前有一台设备连接到计算机,JavaScript应用程序如何检测?
更新2013-08-08
我已将此问题标记为已回答,因为正如Dmitry的作品所示 - 在撰写本文时 - 对于JavaScript应用程序来说,没有简单的方法可以知道在应用程序的加载时间是否连接了Leap Motion设备。
答案 0 :(得分:2)
这取决于您可用的操作系统API和驱动程序。当设备连接到计算机时,操作系统可以检测连接到其中一个插槽的设备(使用IRQ,轮询等)。然后,您可以使用驱动程序或OS API(如果它本机支持此类设备)来检查设备的状态。由于这通常是使用更低级的编程语言,如C ++,C甚至是汇编语言(javascript不适合有几个原因),你应该检查你的javascript API参考(不确定你是否使用浏览器API,Win8 API或别的东西)并查看是否有任何相关的功能。
更新:您发送的API链接似乎非常模糊。但是我发现它建立了一个到本地主机的WebSocket连接。 Controller.connect()
函数实际上是一个过程(不返回任何内容)。但我找到了一个更有用的链接(入门:http://js.leapmotion.com/start),它们提供了不同事件的描述,包括以下内容:
在这种情况下,您可以使用回调而不是谓词:
function doMyOwnStuff()
{
console.log( "O_o" );
}
var controller = new Leap.Controller();
controller.on('deviceConnected', function() {
console.log("A Leap device has been connected.");
doMyOwnStuff();
});
controller.on('deviceDisconnected', function() {
console.log("A Leap device has been disconnected.");
});
//should probably fire a 'deviceConnected'
controller.connect();
我希望它有所帮助,因为我没有要测试的硬件。
答案 1 :(得分:0)
要了解有关将Leap与Web App集成的信息,我将针对Leap Motion反编译纽约时报阅读器。
关于它的实现(built.js),下面的代码可能有所帮助。 (基于Backbone.js)
var LeapController = new Leap.Controller({enableGestures:true});
window.L = LeapController;
LeapController.on('deviceConnected', function () {
console.log('deviceConnected', arguments);
// in the example code, this fires when the app starts.
// in our app, it only fires when the device is reconnected after having been connected when the app was started.
dispatch.trigger('LeapControl:reconnect');
});
LeapController.on('ready', function () {
// this fires when the app is ready.
dispatch.trigger('LeapControl:reconnect');
});
LeapController.on('connect', function () {
console.log('device is connected');
// this fires when no device is plugged in. wtf.
});
LeapController.connection.on('deviceConnect', function () {
console.log('deviceConnect');
// this fires when the device is changes state from plugged in to ungplugged and vice versa.
});
LeapController.on('deviceDisconnected', function () {
console.log('deviceDisconnected', arguments);
dispatch.trigger('LeapControl:disconnect');
});
显然,NYTimes Reader的开发人员已经发现,在应用加载之前检测Leap Controller是否已经连接起来并不容易。 (“wtf”,哈哈....)
定义LeapControl行为的部分代码:断开/重新连接事件,可理解:
newNews.views.Disconnected = Backbone.View.extend({
el: $('#disconnection-box'),
initialize: function () {
_.bindAll(this);
},
open: function () {
this.listenTo(dispatch, 'LeapControl:disconnect', this.show);
this.listenTo(dispatch, 'LeapControl:reconnect', this.hide);
return this;
}, ........
因此,当触发LeapControl:重新连接时,会弹出一个说“未检测到跳跃运动控制器”的弹出窗口。
调试时,如果在启动应用程序之前插入了跳跃动作,则会按以下顺序触发事件,这样可以确保正确检测:
同时,如果没有预先插入,只会触发此操作:
作为结论,我们可以使用'ready'事件来处理这种情况。 HTH