0

我正在尝试使 LEAP 运动来放大和缩小 Canvas 元素,并且效果很好。

现在,当您将手放在活动区域​​并垂直或水平移动时,对象会相应移动。美好的。

当您将手放在屏幕上时,元素的大小会减小,当您将手拉向自己时,元素的大小会增加。也很好。

当您想将手从该区域移开时,问题就开始了。

元素跟随你到极致,这意味着它变得非常大(如果你把手拉回自己身上)。我设法实现了一个控件,如果我放开一些手指(例如用手指指向屏幕 - PIN),那么图像就会冻结。好的。

现在,问题和问题:如何使当我将手放回控制区域时,元素从我离开它的相同位置开始?我整晚都在挣扎,这很困难,我没有做到。所以如果你能做到,至少我欠你一杯啤酒:)

这是代码(s 是我的画布元素,cameras[0] 具有 x,y 属性,.ratio 是深度):

        var defaultRatio = s.cameras[0].ratio;
        var firstValidFrame = null;
        var started = null;
        var controller = new Leap.Controller({enableGestures: true});
        controller.loop(function(frame) {
            if(frame.hands.length > 0)
            {
                if (!firstValidFrame && frame.valid) firstValidFrame = frame;
                var hand = frame.hands[0];
                var position = hand.stabilizedPalmPosition;
                var fingers = hand.fingers;
                var center = hand.sphereCenter;

                if (position[2] < 60) {
                    started = 1;
                }

                if (fingers.length > 2 && started) {
                    s.cameras[0].x =  - position[0]*2;
                    s.cameras[0].y = position[1]*2-360;
                    s.cameras[0].ratio = defaultRatio - (position[2]*2/360);

                }
            }
        });

如果您有兴趣,我在 Sigma.Js 图形可视化上的 Node.Js 应用程序中将它与 Leap.Js 库一起使用...

太感谢了!

4

1 回答 1

0

我可以想到两种方法来做到这一点:

  1. 让用户在再次开始移动之前将他们的手移回移动元素被“放下”的同一位置。

  2. 相对于手的位置移动元素。换句话说,当您将手放回活动区域时,保存该位置并在手移动时将元素移动相同的相对量。

于 2014-02-20T22:34:13.957 回答