反转和转换滑块值

时间:2011-06-27 16:52:12

标签: actionscript-3 math

我目前有一个垂直滑块,由用户使用startDrag控制。冰球的运动受到115px高的轨道动画片段的限制。

private function init():void
{
    puck.y = (track.height-puck.height)/2;
    puck.buttonMode = true;
    puck.addEventListener(MouseEvent.MOUSE_DOWN,onMouseDown);
}
private function sendNewValue():void
{
    trace(Math.round(puck.y-track.y+(puck.height/2)));
    var newVal:Number = ; //need some math magic here
    dispatchEvent(new ToolEvent(ToolEvent.SCALE,1));
}
private function onMouseDown(evt:MouseEvent):void
{
    this.stage.addEventListener(MouseEvent.MOUSE_UP,onMouseUp);
    puck.startDrag(false,new Rectangle((track.x + (track.width/2))-(puck.width/2),track.y-(puck.height/2),0,track.height));
}
private function onMouseUp(evt:MouseEvent):void
{
    puck.stopDrag();
    sendNewValue();
}

我可以使用Math.round(puck.y-track.y+(puck.height/2))从中获取一个值,它根据冰球的位置给出1到115之间的值。

现在遗憾的是,数学不是我的强项(对程序员有帮助!),有人请解释我如何转换这些值以便:

1 = 2
115 = 0
midpoint (115/2) = 1

编辑:有点像这里的问题:How do I reverse my sound volume math for my volume slider?,但同时反转我需要在比例尺上调整它的值。

2 个答案:

答案 0 :(得分:4)

如果你正在寻找线性函数,那么:

f(1)=2 and f(115) = 0

F(x) = 115/67 -x/67 will work

<强>概括

如果您正在寻找线性函数 f(x)= a.x + b ,那么:

f(x1)=y1
f(x2)=y2

然后解决方案是:

a=(y1-y2)/(x1-x2)
b=y1 - x1*(y1-y2)/(x1-x2)

答案 1 :(得分:0)

var sliderValue:Number = Math.round(puck.y-track.y+(puck.height/2));
var sliderPercent:Number = (sliderValue / 115);
var result = Math.abs((sliderPercent * 2) - 2);

如果有效,请告诉我。我不是特别了解上面的功能,所以可能会更好。在我的代码中,55会给你1.04,因为它超过了全部金额的一半,在你的情况下是0而不是2是全额。