快速业务通道

Flash中平滑滚动原理及实例解析

作者 佚名技术 来源 服务器技术 浏览 发布时间 2012-07-09

  本文由Flashk授权转载

  平滑上下滚动条示例:
  技术资料:

  如何使用:

  电影剪辑scrollMC的onLoad事件:
  showHeight = 350;
  myHeight = 350;
  speed = 13;
  targetMovie = "show.testMC";

  showHeight用来指定绑定的MC的显示高度,myHeight指定滚动条本身的高度。     speed是滑动的速度,其值越大,滑动越慢。targetMovie指定绑定的MC的路径(相对)。

  技术内幕:

  主要的ActionScript集中在一个空的电影剪辑中:


??onClipEvent (enterFrame) {
??????mcMoved();
??}




onClipEvent (load) {
??? a = eval("_parent._parent."+_parent.targetMovie);
??? function mcMoved() {
?????? ?whereY = -(a._height-_parent.showHeight)*(_parent.dragMC._y/(_parent.myHeight-38));
??????? var tempK = whereY-a._y;
????? ? if (Math.abs(tempK)>1) {
????????? ? a._y += tempK/_parent.speed;
??????? ??? nowY = _parent.dragMC._y;
?????? ?}
??? }
}


  a = eval("_parent._parent."+_parent.targetMovie); 用来将指定绑定的MC位置。以后就可以使用a._x、a._alpha来访问这个电影剪辑了,与此相类似的技术还有_parent["myMC"]。

  whereY = -(a._height-_parent.showHeight)*(_parent.dragMC._y/(_parent.myHeight-38));主要用来计算绑定的MC应该滚动到的位置。
?
function goArea(a) {
??????? dragMC._y = (showHeight-38)*a;
}

  这个比较重要,直接关系到对CPU的占用率。首先,if (Math.abs(tempK)>1)判断当前要滚动到的位置是否离当前位置有一个像素的差值。Math.abs()是计算绝对值的函数。如果不是,即已经滚动到了应该到达的位置,则不进行帧的重绘。(Flash绘制一个帧的图像要耗相当的CPU,事实上,CPU的大部份使用都花在显示上面。AS的执行只要很少的CPU,所以,进行必要的判断,去掉不必要的重新绘制。可以有效地降低CPU的使用率。至少在鼠标没有重新进行交互时可以很好地降低CPU的使用率)。如果其值大于1,则将绑定的MC位置重新计算。

  a._y += tempK/_parent.speed;是一个很经常用的滑动公式,其实真正的公式是这样的:a._y += (whereY-a._y)/_parent.speed 这里只是在上一步进行了简化。


function goArea(a) {
??????? dragMC._y = (showHeight-38)*a;
}

  函数对应三个按钮“滚动到1/3、滚动到1/2、滚动到2/3、”其原理想想应该不难明白。


关键词:

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号