我目前有一个垂直滑块,由用户使用 startDrag 控制。冰球的移动受到 115 像素高的轨道影片剪辑的限制。
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
Edit:有点像这里的问题:如何反转音量滑块的音量数学? https://stackoverflow.com/questions/2179869/how-do-i-reverse-my-sound-volume-math-for-my-volume-slider,但除了反转该值之外,我还需要按比例调整它。
如果您正在寻找一个线性函数,使得:
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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)