对于一个项目,我需要使用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中,我让它们向上或向下移动。
这是我实现的最顺畅的方式,但它不再是非常准确的。前两种方式你有一些延迟。
我想知道是否可以同时使机芯平稳准确?以及如何做到这一点。
答案 0 :(得分:1)
如果你已经有了一个准确的解决方案,可以尝试在其中加入一些缓和措施以保证平滑。您可能想尝试在enterFrame循环中使用它
_paddleLeft.y +=
((userLeft.leftHand.position.rgbRelative.y * stage.stageHeight*2)
-_paddleLeft.y)*0.3;
0.3可以改为0到1之间的其他数字,具体取决于你想要的缓和速度......这是我最好的猜测,希望这有助于^^