注册
 找回密码
 注册
江西广告网
查看: 700|回复: 0
打印 上一主题 下一主题

flash action 详解(10)

[复制链接]

该用户从未签到

1
跳转到指定楼层
发表于 2009-5-2 13:08:42 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
运动缓冲效果简析 菜单的表现方式可以说是千姿百态,充满个性,但透过现象看本质,其技术的核心却有着相通或相似之处,比如今天所要讲的运动的缓冲效果,其在这方面的运用是非常的多,当然,一个好的导航菜单决不仅仅只是运动缓冲的效果,它还包括很多方面,比如创意。今天所写的东西其实并没有多大的技术含量,都是很基本的东西,但是如果你真正掌握了一些基本的知识,那么你才有可能发挥自己的聪明才智去设计一些更酷炫的东西,而不仅仅是简单的把别人的代码copy到自己的作品之中,或者改改别人的原文件就用,这对你的学习并没有什么好处,如果你同意我的观点,那么请接着看下去..... 正题: 主场景中只有一帧、一个MC(MovieClip),如果我要的效果是点一下鼠标,MC就出现在鼠标所点击的位置,该如何实现呢。通常我们可以给MC加这样的代码: onClipEvent(load){ _x=300; _y=200; } //设置MC的初始坐标,如果不需要设置以上代码可省。此代码(↑)只运行一次。 onClipEvent(mouseDown){ targetx=_root._xmouse; targety=_root._ymouse; } //鼠标按下,把其坐标分别赋值给两个变量:targetx、targety onClipEvent(enterFrame){ _x=targetx; _y=targety; } //把targetx、targety的值分别赋值给MC的_x _y //〖当然你也可以这样写: onClipEvent(load){ _x=300; _y=200; } onClipEvent(enterFrame){ if(Key.isDown(1)){//如果鼠标左键按下 _x=_root._xmouse; _y=_root._ymouse; } } 但为了表述方便,以下将采用第一种写法〗 ctrl Enter测试一下效果,当点击鼠标左键,MC就会出现在鼠标点击的位置,但并没有出现MC的 运动过程,那么,如果要出现MC的运动缓冲过程又该如何设置代码? OK,我们先试着给MC加这样的代码: onClipEvent(load){ vx=1; vy=1; //你可以试着改变vx、vy的值,然后看看效果. } onClipEvent(enterFrame){ _x =vx;//或者_x-=vx; _y =vy;//或者_y-=vy; } Ctrl Enter观看效果,我们将看到MC运动了,这是因为enterFrame 以影片帧频不断地触发此动作: _x =vx;(等效于_x=_x vx)_y =vy;使MC的x、y坐标不断的在原来的基础上加上vx、vy,这个你得用心体会。MC虽然运动了,但速度是恒定的,因为MC的x、y坐标每次增加的量(步长)是个定值vx、vy,如果vx、vy不是定值,那很显然MC的运动就是变速的。 基于以上的思想,为了实现MC的运动缓冲过程,我们可以这样设置代码: onClipEvent(load){ _x=300; _y=200; } onClipEvent(mouseDown){ targetx=_root._xmouse; targety=_root._ymouse; } onClipEvent(enterFrame){ distx=targetx-_x; disty=targety-_y; //算出鼠标点击的位置到MC的距离 movex=distx/10; movey=disty/10 _x =movex; _y =movey; } 在这里我们使用了_x =movex; _y =movey;首先我们得注意 movex和movey并不是一个固定不变的数值,在MC的运动过程中,其x、y坐标是不断变化的,所以movex和movey也是不断变化的(movex=distx/10;movey=disty/10;而distx=targetx-_x;disty=targety-_y;)。 以上代码我们可以精简为: onClipEvent(load){ _x=300; _y=200; } onClipEvent(mouseDown){ targetx=_root._xmouse; targety=_root._ymouse; } onClipEvent(enterFrame){ _x =(targetx-_x)/10; _y =(targety-_y)/10; } 我想你可能注意到了,为什么(targetx-_x)、(targety-_y)还要除以10? 你可以把它去掉,变成 : _x =targetx-_x; _y =targetx-_x; Ctrl Enter看看效果,这时你只要一点击鼠标,MC马上就出现在点击的位置,根本就看不到MC的运动过程,这是因为MC的x、y坐标的增量过大,为鼠标点击的位置到MC的距离,正因为如此,鼠标一点击,MC就会马上出现在点击的位置。所以我们要使MC的x、y坐标的增量要比鼠标点击的位置到MC的距离小。当然“10”这个数字你也可以改成其它的数字,比如8、9、12、2等等。 我们再来简单讲讲为什么MC运动会出现缓冲效果。看上图,MC向B点运动不断靠近B点时,B点与MC的距离(targetx-_x)变得越来越小,所以MC x坐标每次增加的量(步长)会变得越来越小,因而出现缓冲效果。 以上代码我们还可以写得更规范一些,以便于修改: onClipEvent(load){ _x=300; _y=200; speed=10; } onClipEvent(mouseDown){ targetx=_root._xmouse; targety=_root._ymouse; } onClipEvent(enterFrame){ _x =(targetx-_x)/speed; _y =(targety-_y)/speed; } 总结:这种效果你可以应用于MC的属性:_rotation, _alpha, scale 。 请记住这样的式子:property = (target - pr
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表