flash action 详解(10)

2016-01-29 13:04 8 1 收藏

flash action 详解(10),flash action 详解(10)

【 tulaoshi.com - Flash 】

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/flash/)

菜单的表现方式可以说是千姿百态,充满个性,但透过现象看本质,其技术的核心却有着相通或相似之处,比如今天所要讲的运动的缓冲效果,其在这方面的运用是非常的多,当然,一个好的导航菜单决不仅仅只是运动缓冲的效果,它还包括很多方面,比如创意。今天所写的东西其实并没有多大的技术含量,都是很基本的东西,但是如果你真正掌握了一些基本的知识,那么你才有可能发挥自己的聪明才智去设计一些更酷炫的东西,而不仅仅是简单的把别人的代码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

来源:http://www.tulaoshi.com/n/20160129/1488769.html

延伸阅读
标签: flash教程
既然是基础篇,就可以白说一堆大家都知道的废话,来浪费大家的时间,那简直是一定的。但是想想打字挺累得,还是算了吧,那些大家都差不多都知道的话我就不写了,反正在网上也很好找到。故以下作者删去50000字…… 废话少说,咱们现在差不多都是用RGB数值描述一个东西的颜色,RGB,red、green、blue顾名思义,红绿蓝嘛。这三个颜色可以...
标签: flash教程
众所周知,中要实现3D效果是比较麻烦的,下面我们就用ActionScript来实现一个比较简单的3D效果。先看看最终效果,一个看起来像是3D效果的花在场景中旋转,在旋转的过程中会改变颜色,还会响应鼠标作相应的动作。静态效果如图1所示。 一、实现原理 要在只能显示二维图形的Flash中显示三维图形,...
标签: PS PS教程
    “Action”在Photoshop的汉化版中被翻译成“动作”。“Action”这个概念,是从Photoshop 4.0版起开始出现的,在Photoshop 4.0版之前称之为“Command”。Action是一个记录了一系列Photoshop操作指令的文件,就好像DOS下的批处理或是Word中的宏。Action文件的扩展名是ATN。 您只要事先准备好待处理的图像,再...
标签: flash教程
    在Flash MX中,我们可以导入QuickTime或Windows播放器支持的标准媒体文件。对于导入的视频对象,可以进行缩放、旋转、扭曲和遮罩处理,也可以通过编写脚本来创建视频对象的动画。Flash MX 6播放器加入了Sorenson Spark解码器,可以直接支持视频播放。此外,Flash MX还支持运行期动态载入JPEG和MP3...
标签: 手机软件
随着iOS设备功能的日益完善,它们已经不再是功能单一的设备,而是可以让用户的生活更加方便的智能设备,现在在设备当中进行一些文字的编辑工作已经不再是什么新鲜事了,对于文字编辑当中各种功能相信许多人也不会陌生了,今天小编就带来一款对文字编辑菜单有增强效果的插件——《Action Menu》。 详细图文介绍 ...

经验教程

434

收藏

7
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部