1

对于一个项目,我需要使用 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 中,我让它们向上或向下移动。

这是我实现的最流畅的方式,但它不再很准确。前两种方法没有某种延迟。

我想知道是否有可能同时使运动平稳和准确?以及这是怎么可能的。

4

1 回答 1

1

如果您已经有一个准确的解决方案,也许您可​​以尝试在其中放一些缓和以使其平滑。您可能想尝试在 enterFrame 循环中使用它

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

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

于 2013-01-03T16:07:52.253 回答