打印

[AS1&2] 崩溃,鼓捣了一下午没有鼓捣出算法(严重后悔数学没学好)[有图有附件,就等您来指点了]

在恶补flash基础知识,看到startDrag这个函数时突然想到试着做个拖动条控制MC滚动的东东,
一点一点鼓捣过来没什么问题,最后要计算滚动条拖动到最下面时MC的Y坐标该如何时栽了,鼓捣了一下午了,这大热天的,真崩溃。
请各位高人帮看下,赐个算法指点迷津,附上源文件。
不能传附件,这是网盘地址:http://218.61.60.133/API/fileq.p ... 17927980A1342954662
=====================================================================================================
是不是大家懒得下源文件所以没人回呢?那我上图,把问题直接拿出来说,只求个算法

(图中把位置分开排列只为描述方便,实际控制中蓝色和红色都在黑色区域内并且x坐标不变。)
如图:黑色矩形就是限定的MC显示区,蓝色矩形就是滚动条,红色矩形是要滚动显示的MC;
程序刚加载时蓝色矩形在a点,红色矩形在c点;
目的就是蓝色矩形从a运动到b时,红色矩形相应的从c运动到d;
这中间需要一个算法来实现,俺的数学实在差劲,只能想到是要用蓝色移动距离的百分比来控制红色,但实在列不出算法,
试了很多都没有达到预期效果,还请高手指点。
注:红色矩形的长度决定了蓝色矩形的长度,红色矩形的长度是根据要显示的内容长度自定的。
需要源文件请点击网盘地址下载。

[ 本帖最后由 mixidea 于 2008-7-30 00:16 编辑 ]
//_parent.mc._y = (_parent.msk._y*btn._height-btnwy*_parent.mc._height)/btn._height +10;
修改为=>
_parent.mc._y = -this._y*_parent.mc._width/_parent.msk._height;
可能位置还需要稍微调整下。
呵呵,不知道是不是要的这个效果哈
试了K5的这句,好象不太对,还没来得及仔细分析其中的算法,
我想做的效果和给出的源文件上的基本差不太多了,就是拖到最下面时那个MC的位置上去的多了一些,
期望效果是滚动条滑到最下面时MC正好可以显示到最下面的内容,并上去一点点留些白,也就是我那句最后面的+10
总之还是感谢了。

好像下边还是没对齐……

回家帮你再看看了闹

TOP

呵呵  下班点了  赶紧回家吃饭咯~

TOP

草稿纸都画了好几张了,还是没有结果,哪位能指点一下

TOP

重新看了下哈~

具体算法是这样的,根据移动的百分比来算
滚动条能移动的最大位移为(b._y-a._y)
而mc的移动最大值是(c._y-d._y)
根据移动的百分比来算的话应该是这样
设当前滚动条的位置是aa点,那么滚动条移动了
(aa._y-a._y)/(b._y-a._y)
那么当前mc的位置是bb
则(c._y-bb._y)/(c._y-d._y)
两个应该相等 即:
(aa._y-a._y)/(b._y-a._y)=(c._y-bb._y)/(c._y-d._y)
最后bb._y=c._y-(aa._y-a._y)/(b._y-a._y)*(c._y-d._y)

TOP

引用:
原帖由 k5angle 于 2008-7-30 00:24 发表
具体算法是这样的,根据移动的百分比来算
滚动条能移动的最大位移为(b._y-a._y)
而mc的移动最大值是(c._y-d._y)
根据移动的百分比来算的话应该是这样
设当前滚动条的位置是aa点,那么滚动条移动了
(aa._y-a._y) ...
这么晚还没睡,以为你已经睡了呢,太强大了,终于达到了期望效果,万分感谢~
我快没救了,连数学中运算法则都忘了,差点没看明白最后一步式子是怎么来的,瀑布汗~

[ 本帖最后由 mixidea 于 2008-7-30 01:05 编辑 ]

TOP

=,=

昨天电脑挂了,重装完系统加一些软件就半夜了哈哈

TOP

呵呵,难怪,我的系统也有问题了,一直拖着没做,大热天的实在懒得弄~

TOP