在AS3游戏中平稳/准确的Kinect运动

时间:2012-12-30 12:42:50

标签: actionscript-3 kinect physics

对于一个项目,我需要使用Kinect for Xbox进行flashgame。 使用AS3NUI库来访问大多数Kinect函数对我来说效果很好。

这是一个乒乓球游戏,你必须通过手动运动垂直移动你的球拍。 我已经尝试了几种移动桨的方法,但它们都没有真正准确。如果它们更准确,它们就不再光滑了。

我的第一个方法是将paddle.y设置为hand.y的值。

 _paddleLeft.y = (userLeft.leftHand.position.y);

当然结果太可怕了。 这是我的下一次尝试:

 _paddleLeft.y = (userLeft.leftHand.position.rgbRelative.y * stage.stageHeight*2);

这非常准确,但根本不光滑,有时很难到达舞台的顶部或底部。

最后,我尝试了别的东西。我将手保持在最后Y位置,并检查新位置是高还是低,然后我将手柄向上或向下移动。

 currYLeft = userLeft.leftHand.position.rgb.y;
 currYRight = userRight.rightHand.position.rgb.y;

if (currYLeft > prevYLeft + 10){
    isDown1 = true;
    isUp1 = false;
}else if( currYLeft < prevYLeft - 10){
    isDown1 = false;
        isUp1 = true;
}

prevYLeft = userLeft.leftHand.position.rgb.y;
    prevYRight = userRight.rightHand.position.rgb.y;

在另一个enterframehandler中,我让它们向上或向下移动。

这是我实现的最顺畅的方式,但它不再是非常准确的。前两种方式你有一些延迟。

我想知道是否可以同时使机芯平稳准确?以及如何做到这一点。

1 个答案:

答案 0 :(得分:1)

如果你已经有了一个准确的解决方案,可以尝试在其中加入一些缓和措施以保证平滑。您可能想尝试在enterFrame循环中使用它

 _paddleLeft.y += 
            ((userLeft.leftHand.position.rgbRelative.y * stage.stageHeight*2)
             -_paddleLeft.y)*0.3;

0.3可以改为0到1之间的其他数字,具体取决于你想要的缓和速度......这是我最好的猜测,希望这有助于^^