这是一般情况。
在 Main.as 中,我加载了一个加载简介屏幕的容器。 这个简介屏幕有第一个Leapmotion互动(只需点击一个按钮),它可以加载一个用更多Leapmotion手势控制的新屏幕。
在第一次调用中,控制器表现不错,但是当我点击按钮并加载新屏幕时,控制器“断开连接”并且不再识别手势。
EDITED 我为所有屏幕制作了一个新的“通用”控制器,这是UController类:
这是我的控制器设置:
package {
import com.leapmotion.leap.Controller;
import com.leapmotion.leap.events.LeapEvent;
import com.leapmotion.leap.Frame;
import com.leapmotion.leap.Hand;
import com.leapmotion.leap.Finger;
import com.leapmotion.leap.Vector3;
import com.leapmotion.leap.util.LeapUtil;
import com.leapmotion.leap.Gesture;
import com.leapmotion.leap.SwipeGesture;
import com.leapmotion.leap.ScreenTapGesture;
import com.leapmotion.leap.CircleGesture;
import flash.display.MovieClip;
import com.leapmotion.leap.Pointable;
//import com.leapmotion.leap.Config;
public class UController extends MovieClip {
public var myController:Controller = new Controller();
public function UController() {
myController.addEventListener( LeapEvent.LEAPMOTION_INIT, onInit );
myController.addEventListener( LeapEvent.LEAPMOTION_CONNECTED, onConnected );
myController.addEventListener( LeapEvent.LEAPMOTION_DISCONNECTED, onDisconnect );
myController.addEventListener( LeapEvent.LEAPMOTION_EXIT, onExit );
myController.addEventListener( LeapEvent.LEAPMOTION_FRAME, onFrame );
}
public function onInit(e:LeapEvent):void{
trace("leap init");
}
public function onConnected(e:LeapEvent):void {
myController.enableGesture( Gesture.TYPE_SWIPE );
//if(myController.config().setFloat("Gesture.Swipe.MinLength", 200.0) && myController.config().setFloat("Gesture.Swipe.MinVelocity", 500)) myController.config().save();
myController.enableGesture( Gesture.TYPE_CIRCLE );
myController.enableGesture( Gesture.TYPE_SCREEN_TAP );
//if(myController.config().setFloat("Gesture.ScreenTap.MinForwardVelocity", 30.0) && myController.config().setFloat("Gesture.ScreenTap.HistorySeconds", .5) && myController.config().setFloat("Gesture.ScreenTap.MinDistance", 1.0)) myController.config().save();
trace("leap connected");
}
public function onDisconnect(e:LeapEvent):void{
trace("leap disconnected");
}
public function onExit(e:LeapEvent):void{
trace("leap exit");
}
public static function onFrame(e:LeapEvent):void{
trace("leap frame");
}
}
}
在我的游戏画面中,我只提供onFrame()函数......并且它可以工作,但当我尝试将整个屏幕用作完整的应用程序时,会重复相同的行为。
只有第一个屏幕工作,然后控制器在加载第二个屏幕时停止工作(通过Loader())。
欢迎任何帮助!
答案 0 :(得分:0)
如果您只有一个LeapMotion控制器,请尝试创建一个位于UI屏幕的父范围内的控制器 - 例如Main.as--这样您就不会在创建新实例时浪费资源,因此您的应用程序将更快地运行。
你的问题听起来像是失去了对事件的监听 - 你是否在控制器的每个新瞬间添加它们?
根据图书馆的文档DOCS,我们有以下代码连接到控制器:
controller = new Controller();
controller.addEventListener( LeapEvent.LEAPMOTION_INIT, onInit );
controller.addEventListener( LeapEvent.LEAPMOTION_CONNECTED, onConnect );
controller.addEventListener( LeapEvent.LEAPMOTION_DISCONNECTED, onDisconnect );
controller.addEventListener( LeapEvent.LEAPMOTION_EXIT, onExit );
controller.addEventListener( LeapEvent.LEAPMOTION_FRAME, onFrame );
当然,函数onInit,onConnect必须由您创建。将重复调用函数onFrame,提供有关Controller状态的信息。 onFrame将接收具有强类型(意味着定义的对象类型)属性的Frame对象。