分享
 
 
 

ActionScript动画入门

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

James Rice

作者简介:James是专注于Web开发的自由创作者,并向个人、小型或大型商务公司提供Web开发咨询。访问他的个人工作室:jamesrice.net,他的个人weblog:jamieblog.com

阅读级别:8.7

译序:本篇教程运用一点数学计算技巧,希望对ActionScript脚本爱好的朋友有些帮助。

Flash的基本知识你已经学过,但是你一直不太明白怎样以设计师的角度去创建一个精细的基于Flash界面的Web站点。在这篇教程中,我将向你展示采用一个简单的方式创建交互式的动画,动画中用到了ActionScript技术。

示例中,ActionScript将被用于缩放一个基本的图形,除此以外,ActionScript同样用于其它场合,如运动时的效果,透明效果,或颜色变化等。假设你已经大致了解一些ActionScript语法的知识,并会使用一些创作Flash动画的工具,如DreamWeaver Flash MX。如果你对这些都不是很了解,建议你暂时停一下,先去阅读一点Flash 初级教程。

在我们的工程中将包含一个带有handle(句柄,你可以理解为汽车的方向盘)的Slider Bar(滑动条),它将用于在stage(舞台)上控制一个正方形的大小,拖动handle,正方形将随着扩大或缩小。

图片1:

开始

首先,我们需要设置我们的stage并创建几个symbols(符号),建一个新的Flash文档,并设置550像素宽、500像素高。设置frame(帧)速率为25帧/秒。

图片2:

下一步,创建3个简单的symbols-全部的电影Clips(剪辑、片段)。制作每个符号,选择Insert (插入) > New Symbol (新符号)。我们会把这些symbols存储在library(库)中,过一会我们会把它们放置在stage上。

命名第一个电影片段为“shape”,并在里面创建一个10 x 10像素大小的正方形,使用align(排列)面板在定位正方形到垂直和水平方向的中心,同时,正方形的注册点(定位点)应该是在这个正方形的中心。

图片 3:

让我们返回到主时间线, 创建一个新的电影片段,命名它为“handle”,利用它控制刚才我们创建的正方形大小。“handle”大小是个小矩形8像素宽、30像素高,与正方形一样,中心对齐到垂直和水平位置。

图片 4:

返回到主时间线创建最后一个符号-“handle”滑动时的轨迹线,创建这个电影片段命名为“slider”。在这片段内部,只需简单放置一个400像素长的水平线,使用1像素的线型。然后,对齐这条线,左端的坐标是x=0,y=0,用Align 面板完成。

图片5:

到现在为止,我们已制作完了我们需要的3个symbols。现在,合并“handle”和“slider”,从library面板中点击并进入我们刚才创建的“slider”符号,在当前层上方插入一个新的层,依照下面的图,从library面板中拖动一个“handle”符号实例到stage(舞台)上。用属性面板设置handle的位置:0,-15,以及将这个实例的命名为“handle”,这个handle将被定位在slider-轨迹线的左端,它的属性见下面图片显示:

图片6:

你的slider-轨迹线现在看起来像下面的图片:

图片7:

引入ActionScript代码:

是引入ActionScript时候了!在刚才的slider符号中,在已存在的两个层上再建一个层并命名为“actions”。在actions层上选择第一帧并打开Actions(ActionScript)面板。拷贝或重新敲入下面的代码:

handle.onPress = function(){

this.startDrag(false,0,0,400,0);

};

handle.onRelease = function(){

this.stopDrag()

}

代码包含了两个事件的处理,第一个handle.onPress 函数定义了:当我们的光标在符号实例“handle”上并且鼠标按下的时候将要发生些什么。其中,我们用到了Flash函数startDrag();这将允许我们从左到右拖动这个handle,在拖的动作中我们通过函数startDrag()中的数值参数来限制拖动范围,这个函数看起来是这样:startDrag(lock, left, top, right, bottom).

“lock”参数是true或false:被拖动的对象是否在拖动范围的中心点,在这个教程中这个参数被赋于false,我们更关心的是如何用数值来限制slider的运动范围,我们设置top和bottom坐标为0,left和right分别为0和400,这样handle就可以沿着我们预设的范围滑动了。第二个函数 handle.onRelease 是当鼠标释放时,对handle的拖放将被停止。

返回到主时间线,创建一个层命名为“control”,放置一个slider实例在这个stage上,并定位它在75,450。如果你选择Control(控制) > Test Movie(测试电影),将出现一个滑动条,左右拖动handle,这个handle不会控制一些东西。

现在,在主时间线上创建另一个层,命名为“shape”,从符号库library中拖动一个刚才创建好的正方形图形符号到这个stage上,定位它在270,210并在属性面板中命名它“shape”。

图片8:

至于slider电影片段,我们现在需要添加一些动作到主时间线上,在主时间线中现有的层上再创建一个层,并命名它“actions”。在这个层的第一帧上点击并打开actions(动作)面板,在第一帧中放置下面的代码:

shape.targetWidth = shape._width;

shape.targetHeight = shape._height;

shape.onEnterFrame = function() {

var speed = 5;

this._width += (this.targetWidth - this._width)/speed;

this._height += (this.targetHeight - this._height)/speed;

};

头两行代码初始化我们的两个变量。我们创建变量targetWidth和targetHeight 并设置它们等于图形符号的初始高度和宽度。注意,这初始化只发生一次:在我们电影的开始时。

代码的第二部分为符号shape指定了一个onEnterFrame事件处理函数。这个事件对于你可能还比较陌生,但不久你将知道它的好处!onEnterFrame 中定义的一些动作代码在每一帧中都会执行,如果你的帧速率是25帧/秒,在onEnterFrame 中的动作代码将会运行25次/秒。

在这个函数里面,我们用了一个数学公式定义了图形大小的变化。宽度和高度的计算代码是相同的,因为我们处理的是一个正方形并且是等比缩放。

由于计算宽度和高度的代码行的相同性,所以详细介绍这两行代码中的一行:计算真实高度的代码:

this._height += (this.targetHeight - this._height)/speed;

this._height 是图形的真实高度;这个值变化后,图形的大小将在电影中被真实的反映。

this._targetHeight 是一个变量用于保持轨迹以反映真实高度的变化。

真实高度this._height和目标高度this._targetHeight的差值是真实高度的增量,由于每一帧均要执行这行代码,真实高度this._height将快速地逼近目标高度this._targetHeight ,同样的图形大小会有一些变化的痕迹。这是本篇教程的关键部分!

如果你的数学学得不太好,并对此感到有点困惑,请拿出一张纸和一支笔。写下图形的初始高度:10,目标高度:100,重复执行代码,你将看到会发生:真实高度会越来越接近目标高度,调整“speed”变量决定真实高度到达目标高度的快速程度。

开始运行

差不多完成了!你可以测试一下电影(如果你想这么做的话)。你将看到在底部的滑动条以及一个小的正方形(这个正方形是静止的)。为何不去移动这个正方形呢?因为我们还没有告知滑动条应该变化这两个值:targetHeight和targetWidth。

双击滑动条让我们再一次编辑这个符号,在actions层上的第一帧上点击,并重新打开这个actions面板。你将看到刚才我们为slider滑动条符号加入的拖放代码。只需要再添加一点代码到这里,就完成了这部电影的全部功能。用下面的代码代替已存在的代码:

handle.onPress = function(){

this.startDrag(false,0,0,430,0);

};

handle.onRelease = function(){

this.stopDrag()

}

handle.onEnterFrame = function(){

_root.shape.targetWidth = this._x +10;

_root.shape.targetHeight = this._x +10;

};

头两个函数是相同的,第三个函数是新加的,看起来似乎有些熟悉。对,我们利用onEnterFrame 事件处理函数将滑动条上的handle的坐标与targetWidth和targetHeight这两个值相关联在一起,并且设置目标宽度和高度为handle的x坐标加10。

由于在starDrag()函数中定义了handle的x坐标值范围在0-400之间,因此被缩放图形的目标大小在10到410像素之间(宽:10-410,高:10-410),你可能会把“+10”去掉,并使图形大小在0以下,我可不想让它消失,呵呵。

恭喜!

返回到主时间线,点击Control(控制) > test movie(测试电影),测试一下吧!如果你完全按照上面的步骤去做,你将会看到正确的演示效果。

下载全部源代码:http://www.sitepoint.com/examples/actionanim/source_file_mx.fla

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有