通过加速度计限制HSlider Thumb的移动

时间:2011-11-17 17:17:23

标签: actionscript-3

我正在通过加速度计移动HSlider拇指。以下代码工作正常。但问题是,随着我不断倾斜设备,xSpeed继续增加。这意味着当我现在向另一个方向倾斜时,拇指不会移动一段时间 - 因为,根据我在那个初始方向倾斜的持续时间,xSpeed一直在上升。

所以这有效,但有上述缺陷:

 private function readAcc(e:AccelerometerEvent):void
 {
    xSpeed -= e.accelerationX * 4; 
    myHSlider.dispatchEvent(new FlexEvent("valueCommit"));
    myHSlider.value += xSpeed;
 }

但我想做的是在hSlider.value ==最小值或最大值后停止递增xSpeed。听起来很简单,但是当我输入if语句时,它们会阻止拇指移动:

private function readA(e:AccelerometerEvent):void
{
if(h.minimum < h.value && h.maximum > h.value)
    {
    xSpeed -= e.accelerationX * 4; 
    h.dispatchEvent(new FlexEvent("valueCommit"));
    h.value += xSpeed;
    var lastSpeed:Number = xSpeed;
}
else if (h.value == h.minimum || h.value == h.maximum)
{
    xSpeed = lastSpeed;
    h.dispatchEvent(new FlexEvent("valueCommit"));
    h.value += xSpeed;
}
}

使这项工作有什么逻辑?

感谢。

2 个答案:

答案 0 :(得分:0)

添加(或减去)xSpeed时,滑块值可能超出最小或最大限制。检查这一点,如果值太高则减去,或者如果值太低则加减。

// EDIT: Code modified to reflect most recent comment
if(h.minimum < h.value && h.maximum > h.value)
{
    xSpeed -= e.accelerationX * 4; 
    var lastSpeed:Number = xSpeed;

}
else if (h.value <= h.minimum )  
{
    xSpeed = 2;
}
else if ( h.value >= h.maximum )
{
    xSpeed = -2
}
h.value += xSpeed;
h.dispatchEvent(new FlexEvent("valueCommit"));

答案 1 :(得分:0)

好的,已经想出来并希望分享它。关键是不要设置hslider的h.value。相反,只需设置拇指的x,让值自己处理。加速度计事件调用处理程序;在该处理程序中创建一个moveThumb()函数,该函数将调整该x。然后,在moveThumb()函数内,调度valueCommit事件,以便hslider响应。

 private var xSpeed:Number;

 private function accUpdateHandler(e:AccelerometerEvent):void
 {
xSpeed -= e.accelerationX;
moveThumb();
 }

 private function moveThumb():void
 {
     var newX:Number = h.thumb.x + xSpeed;
     var newY:Number = h.thumb.y + ySpeed;
     if (newX < 0)
     {
         h.thumb.x = 0;
         xSpeed = 0;
     }
     else if (newX > h.width - h.thumb.width)
     {
         h.thumb.x = h.width - h.thumb.width;
         xSpeed = 0;
     }
     else
     {
         h.value += xSpeed;
     }
     h.dispatchEvent(new FlexEvent("valueCommit"));
}
相关问题