这可能是直截了当的,但由于某些原因我无法破解它(实际上它是因为我在数学上很可怕!)。
我有一个视口,一次显示800个像素,我想在虚拟像素数上移动它,比如2400像素宽。
我使用滚动条(0-1)的相对位置来确定视口应移动到的虚拟像素。
我有一个循环n = 800,我经历过。 我想从滑块告诉我的位置开始读取一系列plottin点,并从那一点开始迭代接下来的800点。
我遇到的问题是当我的滚动条一直向右并且它的相对位置= 1我的读取点= 2400 .....这在某种程度上是正确的。但这使得我对绘图点的阅读位置转到了最后一点,当我开始迭代时,我没有任何要读的点。
基于我移动一个800像素宽的滑动盒,在这种情况下盒子的左边应该是1600,它的右边应该是2400
我怎样才能做到这一点?
我是否需要某种值映射公式?
private function calculateShuttleRelativePosition():void
{
var _x:Number=_scrollthumb.x
_sliderCenter=_x + (_scrollthumb.width / 2)
_sliderRange=_scrollbar.width - _scrollthumb.width;
_slider_rel_pos=(_sliderCenter - _sliderCenterMinLeft) / _sliderRange
}
pixel = slider relative position * 2400
readpoint= pixel
答案 0 :(得分:3)
滚动条的范围应该是最左边像素可以拍摄的范围,而不是所有像素的范围。
所以你的范围是1600(2400 - 800),而不是2400。这是您应该用于确定偏移量的比例因子。
作为一个警告,总是在这些事情中注意一个错误。由于您的条形范围从0到1,因此如果您不小心,输出的像素范围将介于0到800之间,如果您不注意,可能会溢出阵列:)。
答案 1 :(得分:1)
答案实际上非常简单 - 不是让相对位置在整个宽度上滑动(这就是你上面的那个),而是从0开始并运行到宽度 - 800(或视口的宽度)。
一些C-ish代码看起来像:
int viewPortWidth = 800;
int virtualWindowWidth = 2400;
// I'm assuming your code above is right -- I didn't check
float sliderRelativePosition = calculateShuttleRelativePosition();
// The casts (int and float here), make sure that you're rounding down to an integer
// pixel between 0 and virtualWindowWidth - 1, inclusive
int pixel = (int)(sliderRelativePosition * (float)(virtualWindowWidth - viewPortWidth - 1));
readPixels(pixel, viewPortWidth); // Function that loops through the pixels you want