影片剪辑动起来-雅酷互动flash简易教程第2篇

上次我们学会了如何创建影片剪辑和如何从库中调用影片剪辑。但是flash之所以在动画领域一骑绝尘,靠的可是出类拔萃的动画能力。所以,如何用as实现动画才是问题的关键。现在我们就来探讨一下这个问题。

在探讨之前,首先请确认你理解这个概念:帧。已经了解该概念的同学,这一段可以华丽地掠过了。帧是动画里的一个概念,说简单点,就是电影中的一格。见过电影胶片的人都知道,电影是由一格一格的画面组成的。电影镜头靠在极短的时间里播放这些画面而使镜头连贯成运动的影像,具体说是一秒钟24格。动画里的帧也是这样的概念,而帧频就是指每秒钟播放的整数,flash就是靠这个来实现动画播放的,传统的flash关键帧动画也是靠播放头沿时间轴播放而实现动画的。没见过时间轴的,可以打开flash看一眼。

那么,如果我们使用as,又如何让影片剪辑动起来呢?只要我们也以帧频的速度控制影片剪辑的属性就行了。

下面介绍一些影片剪辑常见的属性。剩下的大家可以去查flash的帮助。(使用帮助是自学软件语言最方便的学习方法,只要按F1就出来了。)

在上一篇中其实我们已经接触到了一些。

比如

myMc._x
myMc._y

其中myMc是你的影片剪辑名称。注意这里的名称不是它在库里作为元件的名称,而是它在场景里的名称,也就是createEmptyMovieClip中你为它起的那个名字,或者attachMovie中的第二个名字。

比如:

this.createEmptyMovieClip("myMc",1);中的myMc

或者

this.attachMovie("myMovie","myBtn",1);中的myBtn,注意不是myMovie,不知道myMovie是什么的,回去看第二篇。

当然你也可能不是使用as创建或者加载的影片剪辑,而是直接使用鼠标从库中拖过来的影片剪辑。那ok,用鼠标点中它,在属性面板中为它命名,此处命的名就是你在程序中使用它的时候要用的名称,就像你叫“小张”,小张就过来了。

_x是影片剪辑X轴坐标,_y是影片剪辑的Y轴坐标。

myMc._x=10;
myMc._y=20;


这两句代码就是把myMc放到x轴坐标为10,y轴坐标为20的位置。

自己从库中加载一个影片剪辑,把这两个数字改几次,试一下。

其他的属性同理。

_alpha是影片剪辑的透明度。
_width是影片剪辑的宽度。
_height是影片剪辑的高度。
_rotation是影片剪辑的角度。
_xscale是影片剪辑横向上的扩展度。
_yscale是影片剪辑总向上的扩展度。

没有明白这几个属性什么意思的,也按照上面的方法试一下。

好了,既然明白了这几个属性的意思,我想动画应该怎么实现,大家估计已经猜出来了,比如我想让myMc从左侧横着飞进场景的话,只需要控制_x,使它从一个负值,变成某一个正值就可以了。比如让他变到100,那它就停在x轴坐标100的位置了。

其他的也同理,比如渐现,渐隐,就是一个透明度的控制,也就是对_alpha的值的控制,变大变小则是对_width、_height、_xscale、_yscale的控制来实现,而旋转,则通过_rotation的控制来实现。

原理知道了,如何实现呢。

通过循环。

只要我们建立一种循环,使他在每次循环的过程中改变myMc的属性值就可以了。比如第一次循环,myMc._x=0;第二次循环,把这个值加1,myMc=1,以此类推,myMc=2,=3,=4,循环下去,而flash的帧频如果是25,也就是每秒钟播放25帧的话,如果我们使这段程序按帧频的频率进行播放的话,那么一秒钟以后,myMc是不是向右移动了25个像素。

原理绕来绕去说半天,其实实现起来很简单,我们只需要找到一个能够使程序以帧频的频率运行的方法就可以了,这个方法就是使用onEnterFrame。多看它几眼,记住它吧,你以后会经常用到它。

看下面的代码:

myMc._x=0;
onEnterFrame=function(){
    myMc._x= myMc._x+1;
}

第一句不用解释了,使myMc处于X轴为0的位置上。

下面

onEnterFrame=function(){}

这是flash里常见的一种形式,onEnterFrame简单解释一下,就是使{}里边的程序体,按照帧频的频率来运行。

比如上面的例子中,如果你的flash文件帧频是25,那么,myMc._x=myMc._x+1就在一秒钟内运行了25次。

最后向初学者解释一下myMc._x=myMc._x+1的意思,这句话实际上就是把右侧myMc._x+1的值赋给左侧的myMc._x.。比如第一次循环的时候,myMc._x的值是0,那么0+1以后,再赋给myMc._x,此时myMc._x变成1,循环第二次的时候,1+1再赋给myMc._x,此时myMc._x的值变成2。当然,这句程序还有个更简单的写法:myMc._x++;作用和myMc._x=myMc._x+1的作用是一样的。

那如果myMc._x=myMc._x+2该怎么写?myMc._x+2?错了,正确的简写方法是myMc._x+=2;

好了,下面运行一下上面的程序,看看什么效果,试着把前面提到的影片剪辑的其他属性换掉_x试一下,看看什么效果。

到这里我们基本上使用程序的方式使影片剪辑动起来了,只要多动脑筋,你就可以利用这些制造出丰富多彩的动画效果。

但是,有人可能也发现了问题。就是没有办法让动画停下来。这是因为如果我们不把onEnterFrame清除的话,它会一直以帧频的频率运行下去。这不仅使你的动画停不下来,而且还将一直占用着你的CPU资源。所以,当onEnterFrame的任务完成以后,一定要把它及时地结束。

使用delete onEnterFrame可以清除正在运行的onEnterFrame。

所以上面的例子,我们可以改成下面这样。

myMc._x=0;
onEnterFrame=function(){
    myMc._x= myMc._x+1;
    if(myMc._x>=200){
        delete this.onEnterFrame;
    }
}

再次运行试一下,影片剪辑运动到200的位置停下来了。

再次拿其他的属性来试一下吧。今天就说到这里,下次我们来研究一下缓冲效果,以及如何使用as实现更复杂的运动效果。

评论: 0 | 引用: 0 | 查看次数: 4427
发表评论
登录后再发表评论!