您的位置: 首页 > 技术文档 > 多媒体制作 > Making Things Move 第二章
AS3自写类整理笔记:类的分包处理 回到列表 Making Things Move 第一章
 Making Things Move 第二章

作者:alan98 时间: 2008-04-16 文档类型:翻译 来自:蓝色理想

第 1 页 ActionScript 3.0 动画基础 [1]
第 2 页 ActionScript 3.0 动画基础 [2]
第 3 页 ActionScript 3.0 动画基础 [3]
第 4 页 ActionScript 3.0 动画基础 [4]
第 5 页 ActionScript 3.0 动画基础 [5]
第 6 页 ActionScript 3.0 动画基础 [6]
第 7 页 ActionScript 3.0 动画基础 [7]

帧循环

帧循环的理念,存在于 Flash 最早的版本中,那时 ActionScript 还不像今天那么强大。把代码写入关键帧,并在下一帧中写入像 gotoAndPlay 这样的语句,使播放头(playhead)回到前一帧。这样两帧之间就形成了一个无限循环,每当播放头到了代码帧上时,就会执行那些代码。例如,在舞台上有一个实例名为 ball 的影片剪辑。
第一帧的代码就像这样:

ball.x ++;

第二帧的代码如下:

gotoAndPlay(1);

实际上第二帧不需要做任何事,只是让时间轴自动回到第一帧而以。另一个版本是建立三个帧,第一帧进行初始化,写入只执行一次的代码,不进行循环。第二帧才是主要的执行代码,第三帧只写 gotoAndPlay(2); 这个方法在早期 Flash 版本中常被使用,虽然有点过时,但是同样可以出色地完成任务。马上我们还要学到更灵活更强大的设置方法,但今后你会发现其实原理上是一样的。

影片事件

影片事件在 AS 3 中彻底的消失了,这真是件好事。但还要捎带提一下,回顾 Flash 5 的时代,只有帧循环和影片剪辑事件两种选择。影片事件指代码直接写在影片剪辑上,而不是帧上。如何实现影片事件,首先选择舞台上的影片剪辑,然后打开动作面板并将代码写在上面,这些代码只对该影片剪辑有效。所有代码必需写在事件块中,比如:

onClipEvent(eventName){
// code goes here
}

对于 onClipEvent(eventName),作用于 eventName(某种事件)。对于"on"类型事件则必需指定鼠标或键盘事件,如按下(press)和释放(release)。

事件名称(eventName)是指许多Flash 影片事件之一,所谓事件就是在影片中发生的事。事件分为两种:系统事件和用户事件。系统事件指发生在如计算机,Flash,或影片上的事件,比如调取数据,调取信息,或播放帧等。用户事件是指用户所做的一些事,基本上就是鼠标和键盘两种。影片事件使用得最多的就是 load 和 enterFrame 这两个。 Load 事件会在影片第一次出现在舞台上时才执行,且只执行一次。所以说非常适合在这里面写入初始化代码。只要把代码写在大括号间即可:

onClipEvent(load){
// initialization code
}

我们可以把带有如下代码的影片剪辑放入时间轴上(注意:此处为 AS 1 写法):

onClipEvent (load) {
 this._x = 100;
 this._y = 100;
}
onClipEvent (enterFrame) {
 this._x += 5;
}

本书示例中的代码不使用这种写法(因为它已经不是一种语言了),但不论使用何种方法,初始化(initialization),重复动作(repeating actions)和屏幕刷新(screen refresh)都是非常重要的。

事件及事件处理

Flash MX 的 ActionScrpt 发生了重要的改变,这些转变与革新为 Flash 成为真正的富客户端程序(RIA)奠定了基础。其中一个就是全新的事件结构,在编写非常复杂的行为时比之前的版本好用很多。 Flash MX 之前的版本,只能把代码放在影片和按钮的 onClipEvent(eventName) 或 on(eventName) 这两种事件处理方法中。这就意味着,在设计的时候就要把影片剪辑放到舞台上,并把代码写入影片剪辑中。MX 的事件结构并不完美,但与之前版本来说已经有了长足的进步,并允许我们在任何时候访问任何事件,或是停止处理任何事件,或是动态改变某个事件的行为,可以想象这有多么的强大和灵活。

要想了解事件,就要明白下面几条概念:侦听器(lintener)与处理函数(handler),这两个名字很贴切,侦听器就是侦听事件的对象,处理函数是一个用于处理所要发生的事件的函数。侦听与处理在 ActionScript 的发展过程中进行过很多次演变,在 AS 2 中就有很多不同的实现方法。为了避免混乱,我很推崇 AS 3,因为它简化了这个过程,使事件处理变得更方便更一致。

事件侦听器与处理函数

前面说过,侦听器是一个用于侦听事件的对象。我们可以设计一个类,通过调用addEventListener 函数为某事件指定一个侦听器。输入要侦听的事件名称以及要执行处理的函数名称。看一个例子:

addEventListener("enterFrame", onEnterFrame);

在加入事件侦听器时,可使用可选参数,本书中不会用到;对于大多数的应用程序来说,会使用以上这种写法就够用了。请注意事件名"enterFrame"为字符串型,戏称它为“魔力字符串”(Magic String)。为什么这么叫?如果你误输入成了"entorFrame",尽管没有这个事件名称,编译器也会编译执行它,会发现事件处理函数没有执行。但 AS 3 仍会对其进行处理,除了使用“魔力字符串”以外,还可以使用事件类(Event Class)的属性。例如:

addEventListener(Event.ENTER_FRAME, onEnterFrame);

实际上 Event.ENTER_FRAME 的值就是”enterFrame”这个字符串。那么这个属性也可能输错就像 Event.ENTOR_FRAME ,但这种方法好在,如果输入错误了,程序会拒绝编译,并提示你在事件类中不存在该属性。编译器会提示发生错误的行及确切的字符。所以,最好使用这种方法,除非编译器会帮我们修正错误或编写代码。
除此之外,还有其它的事件类型如:MouseEvent.MOUSE_DOWN,KeyboardEvent.KEY_DOWN,TimerEvent.TIMER 等。这些都由 "mouseDown" , "keyDown" , "timer" 这样的简单字符串来表示,如果你记不住这些字符串,那么最好就去使用事件类的属性。

另一个重点是,使用 addEventListener 函数直接调用类中的函数。有时,需要侦听另一个对象产生的事件,例如,有一个名为 mySpriteButton 的 Sprite 影片(Sprite):影片或按钮,能完成按钮的动作。当用户点击它的时候就会产生 mouseDown(鼠标按下)事件。侦听该 Sprite 影片的 mouseDown 事件,就要调用该对象的 addEventListener 方法,如下:

mySpriteButton.addEventListener(MouseEvent.MOUSE_DOWN, onSpritePress);

最后一点,必需要有事件处理函数如 onEnterFrame,在 AS 3 中,可以任意地为事件处理函数命名,这点与以前的 ActionScript 不同。在 enterFrame 示例中,使用 onEnterFrame 做事件处理函数,是因为我们习惯使用这个名称。在 AS 3 中,onEnterFrame 已不再是关键字,当然也可以为这个处理函数命名为 move,run,或是 doSomethingCool。然而,我们已经习惯使用”on”表示事件开始,后面跟一些描述词如 onStartButtonClick,onConfigXMLLoad 或 onRoketCrash。有些朋友喜欢在事件名后面加上 "Handler" 作为后缀,如: enterFrameHandler,这只是个人偏好问题。

侦听器用于侦听事件,但对于一个侦听器来说,也许会同时侦听很多事件。在系统内部,一个事件对象拥有一个包括了所有对象及自身的侦听器的列表。如果一个对象能够产生多种不同类型的事件,如 mouseDown,mouseUp,mouseMove 等,那么它就拥有一个侦听器列表,其中包括它所涉及的所有类型的事件。无论触发何种事件,都会检索一遍列表,然后使列表中的每个对象都知道所发生的事件。
另一种对事件的描述是,将其看作一个加入到事件行列的侦听器成员。产生事件的对象将它所产生的事件公布给所有成员,当你不再需要这个对象进行侦听时,可以令其停止侦听或使用 removeEventListener 方法解除该成员;就是告诉对象从侦听器列表中删除该侦听器,这样一来,他就不会再接收信息了。

让我们看看这段代码,下面是一段在舞台中创建 Sprite 影片,并进行绘图,然后再为其添加侦听器的代码:

package {
 import flash.display.Sprite;
 import flash.events.MouseEvent;
 public class EventDemo extends Sprite {
  private var eventSprite:Sprite;
  public function EventDemo() {
   init();
  }
  private function init():void {
   eventSprite = new Sprite();
   addChild(eventSprite);
   eventSprite.graphics.beginFill(0xff0000);
   eventSprite.graphics.drawCircle(0, 0, 100);
   eventSprite.graphics.endFill();
   eventSprite.x = stage.stageWidth / 2;
   eventSprite.y = stage.stageHeight / 2;
   eventSprite.addEventListener(MouseEvent.MOUSE_DOWN,onMouseDown);
   eventSprite.addEventListener(MouseEvent.MOUSE_UP,onMouseUp);
  }
  private function onMouseDown(event:MouseEvent):void {
   trace("mouse down");
  }
  private function onMouseUp(event:MouseEvent):void {
   trace("mouse up");
  }
 }
}

在初始化函数(init)中创建一个 Sprite 影片,并在里面画圆,置于舞台中心,最后两句是为它添加两个侦听器,侦听鼠标按下(MOUSE_DOWN)和鼠标弹起(MOUSE_UP)这两个事件。它们是MouseEvent 类的两个属性,而这个类必需要导入。最后定义两个处理函数 onMouseDown 和 onMouseUp。

由事件对象调用事件处理函数,通常还会包括一些事件信息。在处理鼠标事件时,就包括触发该事件时鼠标位置的信息如:鼠标点击在按钮上。对于键盘事件,就要包括按下键时的信息如 Ctrl,Alt,Shift等。把上述示例保存为 EventDemo.as 文件,并选择一种前面讲过的编译方式。当运行 SWF 时,就会看到每次点击或图形时,都会输出 pressed 或 released。

出处:蓝色理想
责任编辑:bluehearts

上一页 ActionScript 3.0 动画基础 [3] 下一页 ActionScript 3.0 动画基础 [5]

◎进入论坛RIA设计与应用版块参加讨论

相关文章 更多相关链接
FLASH小游戏开发 第三节
Flash P2P 通信技巧(AS-Java-AS)
FLASH小游戏开发 第二节
Making Things Move 第四章
用photoshop制作文字波动动画
作者文章
Making Things Move 第四章
Making Things Move 第三章
Making Things Move 第一章
贪吃蛇游戏代码翻译
关键字搜索 常规搜索 推荐文档
热门搜索:CSS Fireworks 设计比赛 网页制作 web标准 用户体验 UE photoshop Dreamweaver Studio8 Flash 手绘 CG
站点最新 站点最新列表
周大福“敬•自然”设计大赛开启
国际体验设计大会7月将在京举行
中国国防科技信息中心标志征集
云计算如何让安全问题可控
云计算是多数企业唯一拥抱互联网的机会
阿里行云
云手机年终巨献,送礼标配299起
阿里巴巴CTO王坚的"云和互联网观"
1499元买真八核 云OS双蛋大促
首届COCO桌面手机主题设计大赛
栏目最新 栏目最新列表
浅谈JavaScript编程语言的编码规范
如何在illustrator中绘制台历
Ps简单绘制一个可爱的铅笔图标
数据同步算法研究
用ps作简单的作品展示页面
CSS定位机制之一:普通流
25个最佳最闪亮的Eclipse开发项目
Illustrator中制作针线缝制文字效果
Photoshop制作印刷凹凸字体
VS2010中创建自定义SQL Rule
>> 分页 首页 前页 后页 尾页 页次:4/71个记录/页 转到 页 共7个记录

蓝色理想版权申明:除部分特别声明不要转载,或者授权我站独家播发的文章外,大家可以自由转载我站点的原创文章,但原作者和来自我站的链接必须保留(非我站原创的,按照原来自一节,自行链接)。文章版权归我站和作者共有。

转载要求:转载之图片、文件,链接请不要盗链到本站,且不准打上各自站点的水印,亦不能抹去我站点水印。

特别注意:本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有,文章若有侵犯作者版权,请与我们联系,我们将立即删除修改。

您的评论
用户名:  口令:
说明:输入正确的用户名和密码才能参与评论。如果您不是本站会员,你可以注册 为本站会员。
注意:文章中的链接、内容等需要修改的错误,请用报告错误,以利文档及时修改。
不评分 1 2 3 4 5
注意:请不要在评论中含与内容无关的广告链接,违者封ID
请您注意:
·不良评论请用报告管理员,以利管理员及时删除。
·尊重网上道德,遵守中华人民共和国的各项有关法律法规
·承担一切因您的行为而直接或间接导致的民事或刑事法律责任
·本站评论管理人员有权保留或删除其管辖评论中的任意内容
·您在本站发表的作品,本站有权在网站内转载或引用
·参与本评论即表明您已经阅读并接受上述条款
推荐文档 | 打印文档 | 评论文档 | 报告错误  
专业书推荐 更多内容
网站可用性测试及优化指南
《写给大家看的色彩书1》
《跟我去香港》
众妙之门—网站UI 设计之道
《Flex 4.0 RIA开发宝典》
《赢在设计》
犀利开发—jQuery内核详解与实践
作品集 更多内容

杂⑦杂⑧ Gold NORMANA V2