0

这是一般背景。

Main.as中,我加载了一个加载Intro screen的容器。这个介绍屏幕具有第一个 Leapmotion 交互(只需单击一个按钮),它加载了一个由更多 Leapmotion 手势控制的新屏幕。

在第一次调用中,控制器表现不错,但是当我单击按钮并加载新屏幕时,控制器“断开连接”并且不再识别手势。

编辑我为所有屏幕制作了一个新的“通用”控制器,这是 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())。

欢迎任何帮助!

4

1 回答 1

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 将被重复调用,提供有关控制器状态的信息。onFrame 将接收一个具有强类型(即定义的对象类型)属性的 Frame 对象。

于 2013-11-17T21:48:14.323 回答