flash cs 3,影片测试后,不断flash循环影片剪辑播放,我已经加了stop(),哪里可能有问题啊?

Promotions
Estimated Shipping
Symbol 'Circle', Layer 'actions', Frame 1, Line 2 1120: Access of undefined property _root.
Scene 1, Layer 'actions', Frame 1, Line 2 1120: Access of undefined property ovalWidth.
Scene 1, Layer 'actions', Frame 1, Line 3 1120: Access of undefined property ovalHeight.
Scene 1, Layer 'actions', Frame 1, Line 4 1120: Access of undefined property ovalAlpha.
Scene 1, Layer 'actions', Frame 1, Line 7 1120: Access of undefined property ovalWidth.
Scene 1, Layer 'actions', Frame 1, Line 8 1120: Access of undefined property ovalHeight.
Scene 1, Layer 'actions', Frame 1, Line 9 1119: Access of possibly undefined property width through a reference with static type Class.
Scene 1, Layer 'actions', Frame 1, Line 9 1120: Access of undefined property ovalWidth.
Scene 1, Layer 'actions', Frame 1, Line 10 1119: Access of possibly undefined property height through a reference with static type Class.
Scene 1, Layer 'actions', Frame 1, Line 10 1120: Access of undefined property ovalHeight.
Scene 1, Layer 'actions', Frame 1, Line 11 1120: Access of undefined property ovalAlpha.
// Settings
var ovalWidth:Number = 400;
var ovalHeight:Number = 100;
var ovalAlpha:Number = .5; // Notice that alpha ranges from 0 to 1
// Set size
circle_mc.width = ovalW
circle_mc.height = ovalH
circle_mc.x = (stage.stageWidth - ovalWidth) / 2;
circle_mc.y = (stage.stageHeight - ovalHeight) / 2;
circle_mc.alpha = ovalA
// Create first clip
var circle1_mc:MovieClip = new CircleAS3();
circle1_mc.x = 100;
circle1_mc.y = 50;
addChild(circle1_mc);
// Create second clip
var circle2_mc:MovieClip = new CircleAS3();
circle2_mc.x = 300;
circle2_mc.y = 50;
addChild(circle2_mc);
Warning: Actions on button or MovieClip instances are not supported in
ActionScript 3. All scripts on object instances will be ignored.
var animate:Boolean =
var speed:Number = 10;
// Enterframe...
function enterFrameHandler(event:Event)
if( animate ){
circle_mc.x +=
if( circle_mc.x &= stage.stageWidth ){
circle_mc.x = -circle_mc.
addEventListener(Event.ENTER_FRAME, enterFrameHandler);
// Button events
function clickHandler(event:MouseEvent)
if( event.target == start_btn ){
}else if( event.target == stop_btn
start_btn.addEventListener(MouseEvent.CLICK, clickHandler);
stop_btn.addEventListener(MouseEvent.CLICK, clickHandler);
Warning: Text field variable names are not supported in ActionScript 3.
The variable buttonState used for an unnamed text field will not be exported.
Warning: Actions on button or MovieClip instances are not supported in
ActionScript 3. All scripts on object instances will be ignored.
// Button clicks set text field
function clickHandler(event:MouseEvent):void
if( event.target == start_btn ){
status_txt.text = "Start";
}else if( event.target == stop_btn ){
status_txt.text = "Stop";
start_btn.addEventListener(MouseEvent.CLICK, clickHandler);
stop_btn.addEventListener(MouseEvent.CLICK, clickHandler);
// Text clicks launch link in browser
function textClickHandler(event:MouseEvent):void
navigateToURL(new URLRequest(""),"_blank");
status_txt.addEventListener(MouseEvent.CLICK, textClickHandler);
5007: An ActionScript file must have at least one externally visible definition.
import flash.display.MovieC
import flash.events.E
import flash.events.MouseE
public class CircleAS3 extends MovieClip
//******************
// Constructor:
public function CircleAS3()
trace("INIT: "+this.name);
addEventListener(Event.ADDED_TO_STAGE, addedToStageHandler);
//******************
// Events:
private function addedToStageHandler(event:Event):void
addEventListener(MouseEvent.MOUSE_DOWN, onPressHandler);
stage.addEventListener(MouseEvent.MOUSE_UP, onReleaseHandler);
private function onPressHandler(event:MouseEvent):void
this.startDrag(false);
private function onReleaseHandler(event:MouseEvent):void
this.stopDrag();
Scene 1, Layer 'actions', Frame 1, Line 4 1120: Access of undefined property circle1_mc.
Scene 1, Layer 'actions', Frame 1, Line 5 1120: Access of undefined property circle1_mc.
Scene 1, Layer 'actions', Frame 1, Line 10 1120: Access of undefined property circle2_mc.
Scene 1, Layer 'actions', Frame 1, Line 11 1120: Access of undefined property circle2_mc.
// Create first clip
var circle1_mc:MovieClip = new CircleAS3();
circle1_mc.x = 100;
circle1_mc.y = 50;
addChild(circle1_mc);
// Create second clip
var circle2_mc:MovieClip = new CircleAS3();
circle2_mc.x = 300;
circle2_mc.y = 50;
addChild(circle2_mc);
TypeError: Error #1010: A term is undefined and has no properties.
at developer_sample1_fla::MainTimeline/frame1()[developer_sample1_fla.MainTimeline::frame1:12]
// Declare array variable
var books:Array = new Array();
books.push({title:"ActionScript 3 Cookbook",author:"Joey Lott"});
books.push({title:"Essential ActionScript 3",author:"Colin Moock"});
books.push({title:"Adobe AIR 1.5 Cookbook",author:"David Tucker"});
// Loop through array and display text...
var len:uint = 3; // it's better to use books.length here...
for(var n:uint=0; n& n++)
books_txt.appendText(books[n].title+", by "+books[n].author+"\n");
ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller.
at flash.display::DisplayObjectContainer/getChildIndex()
at developer_sample2_fla::MainTimeline/frame1()
// Create a black rectangle
var myClip:Sprite = new Sprite();
myClip.graphics.beginFill(0);
myClip.graphics.drawRect(0,0,100,100);
myClip.graphics.endFill();
// Add the instance to the Stage
addChild(myClip);
// Get the instance's depth in the display list...
var myClipDepth:uint = getChildIndex(myClip);
// Create Number variable
var score:Number = 0;
var increment:Number = .2;
function addToScore(event:MouseEvent):void
score_txt.text = "Score = "+
add_btn.addEventListener(MouseEvent.CLICK, addToScore);
Error opening URL '/images/test.jpg'
Error #2044: Unhandled IOErrorEvent:. text=Error #2036: Load Never Completed.
import flash.events.*;
function completeHandler(event:Event):void
// Add image to the Stage when loaded...
addChild(event.target.content);
function statusHandler(event:HTTPStatusEvent):void
// Respond to status notifications...
trace("HTTP Status: "+event.status);
function errorHandler(event:IOErrorEvent):void
// The image failed to load. Show feedback and
proceed...
trace("IOERROR: "+event.text);
// Create a Loader to load an image...
var loader:Loader = new Loader();
loader.contentLoaderInfo.PLETE, completeHandler);
loader.contentLoaderInfo.addEventListener(HTTPStatusEvent.HTTP_STATUS, statusHandler);
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
loader.load(new URLRequest("/images/test.jpg"));
import flash.display.MovieC
import flash.events.MouseE
public class ShapeRandomizer extends MovieClip
//*******************
// Properties:
private var _numShapes:uint = 25;
private var _maxWidth:Number = 200;
private var _maxHeight:Number = 200;
//*******************
// Constructor:
public function ShapeRandomizer():void
// Initialize...
stage.addEventListener(MouseEvent.MOUSE_DOWN, draw);
//*******************
// Events:
private function draw(event:MouseEvent=null):void
this.graphics.clear();
for(var n:uint=0; n&_numS n++)
var w:Number = Math.random()*_maxW
var h:Number = Math.random()*_maxH
x:Number = Math.random()*(stage.stageWidth/2);
var y:Number = Math.random()*(stage.stageHeight/2);
var c:Number = Math.random()*255;
var b:Number = Math.random()*10;
this.graphics.lineStyle(b, c);
this.graphics.drawRect(x, y, w, h);
this.graphics.endFill();详解AS3中主时间轴访问方法及元件类绑定方法FLASH专题且行资源
&当前位置: &
在AS2中访问主时间轴非常方便,一个_root即可解决,但在AS3中使用root却经常出现问题,特别是在元件内部或者在绑定的类中访问更是经常出现问题,其主要原因在于:1,在AS3中一些大家常用的主时间轴命令已经不是顶级函数,如play();stop()等,因此在很多地方已经不能直接使用,必须在相应对象实例化后才能使用。2,root在as3中代表显示容器的顶级对象,但其只有转换为具体的显示对象实例才可以访问其相应属性与方法。下面以一个例子,来简单说明在AS3中如何访问主时间轴:&这个示例非常简单,即主时间一个形变动画,使用一个按钮来控制这个动画播放,可以将命令直接写在主时间轴上,此时可以直接调用:play()函数,因为此时主时间轴(root或MainTimeLine)在函数执行间已经完成实例化。& &但为了说明类绑定的使用,我们将按钮的功能利用元件绑定类,放在类文件中即:mplay.as& &注意在类中:就不能直接调用play()而必须等主时间轴实例化之后才能调用。mplay类的功能代码:package& {&&&&&&& import flash.display.*;&&&&&&& import flash.events.*;&&&&&&& import flash.events.MouseE&&&&&&& &&&&&&& public class mplay extends SimpleButton{&&&&&&&&&&&&&&& public function mplay() {&&&&&&&&&&&&&&&&&&&&&&& this.addEventListener(MouseEvent.CLICK,playF);&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&& }&&&&&&&&&&&&&&& function playF(event:MouseEvent):void {&&&&&&&&&&&&&&&&&&&&&&& trace(&hi&);&&&&&&&&&&&&&&&&&&&&&&& (this.root as Object).play();&&&&&&&&&&&&&&&&&&&&&&& }&&&&&&& }&&&&&&& }注意其中play()函数使用的方法。使用元件绑定类的最大优势在于:既能实现了代码分离,也充分利用了FLASH可视化编辑优秀。另关于在元件中访问主时间轴的方法详细说明如下:在主时间轴上定义var a:Number=100;在其他时间轴上怎么访问这个变量呢?比如我新建一个mc,把他放到主场景里面,在这个mc的侦上怎么访问a?trace(root.a);trace(parent.a);这两种方法都出现错误&&1119: 访问可能未定义的属性 a正确的写法应当是:(root as MovieClip).a以调用主时间轴的gotoAndPlay()函数为例)://方法1,共N种解决方式,效果都一样(this.root as MainTimeline).gotoAndPlay(2);(this.root as Object).gotoAndPlay(2);(this.root as MovieClip).gotoAndPlay(2);Object(this.root).gotoAndPlay(2);MovieClip(this.root).gotoAndPlay(2);MainTimeline(this.root).gotoAndPlay(2);//方法2//var test:Object=this.//test.gotoAndPlay(2);//方法3//root[&gotoAndPlay&](2);对于加载的 SWF 文件中的显示对象,root 属性是此 SWF 文件所表示的显示列表树结构部分中的顶级显示对象。
对于代表已加载图像文件的位图对象,root 属性就是位图对象本身。 对于第一个加载的 SWF 文件的主类的实例,root 属性就是显示对象本身。
Stage 对象的 root 属性是 Stage 对象本身。 对于任何未添加到显示列表的显示对象,root 属性设置为
null,除非它已添加到符合以下条件的显示对象容器:不在显示列表中,但属于已加载 SWF 文件中顶级显示对象的子级。例如,如果您通过调用 Sprite() 构造函数方法创建新的 Sprite 对象,则其 root 属性将为 null,除非您将其添加到显示列表中(或添加到不在显示列表中但属于 SWF 文件中顶级显示对象的子级的显示对象容器中)。对于加载的 SWF 文件,即使用于加载文件的 Loader 对象未在显示列表中,SWF 文件中的顶级显示对象也会为其本身设置 root 属性。 在 Loader 对象添加为对其设置 root 属性的显示对象的子级前,它不会设置自己的 root 属性。编译时,元件还没有添加到显示列表里面,这时元件里面的this.root的值是null,还没有给赋值,所以编译出错。。用as符给root强制转换类型为一个非空值,就可以通过编译了。编译通过开始运行时,元件开始显示时,this.root会被赋值实例话,就可以调用主时间轴下得变量和函数了,AS3编译比较严格,所以就爆出了错误1061: 调用可能未定义的方法 。之所以提示是&可能未定义的方法&,是因为root是动态类的实例化的因素吧。示例下载:更多学习教程,请参考:&&&&
上一篇: 下一篇:
应当可以吧,因为可以通过this.parent关键字代表层级关系,但判断起来可能比较麻烦
孙老师我把
(this.root as Object).play();换成 MovieClip(root).play();可以了,但按钮必须是在主时间轴的,而当按钮放到影片剪辑内部就不行了,能否定义一个这样的类,不管在主时间轴还是在哪个影片剪辑中,都能被调用的play()类呢?
应当可以吧,因为可以通过this.parent关键字代表层级关系,但判断起来可能比较麻烦
访客日访客日访客日访客日日
联系电话:966,690 二月 独立访问用户
语言 & 开发
架构 & 设计
文化 & 方法
您目前处于:
使用Flash Professional CS5和Flash Builder 4组合动画和ActionScript
使用Flash Professional CS5和Flash Builder 4组合动画和ActionScript
合作伙伴: Adobe
<div class="register_new_content"
Adobe Flash Builder 4 是一个用于 ActionScript 3 和 Flex 框架开发的基于 Eclipse 的 IDE。它的出现让 Flash 开发人员能够使用高效的代码开发环境,同时继续使用 Adobe Flash Professional 创建交互式内容。
结合使用基于类的 ActionScript 代码(而不是基于时间线的 ActionScript 代码)和 Flash Professional 内容对于许多设计者来说还是陌生的。但是,在开发比较大的项目时,可重用代码的好处很显著。这种方法还可以提供新的工作流,让开发人员和设计者能够协作,让项目设计和逻辑的分隔更清晰。
本文概述新的 Flash Builder 4 和 Flash Professional CS5 集成特性,介绍创建由 ActionScript 类控制的简单角色动画的增强工作流。(单击图 1 中的按钮与最终的动画交互。)另外,我们将把完成的作品放到 Flex 项目中,学习如何在富 Internet 应用程序 (RIA) 中重用内容和视觉组件。
图 1. 本教程中构建的简单项目,其中显示的按钮使用 ActionScript 触发 MovieClip 以播放动画(通过单击按钮与示例交互)
注意:示例项目中的步骤有意安排得很简单,因为我们假设您已经掌握了在 Flash Professional 中开发动画的基本方法。因此,本文主要关注组合 ActionScript 和 MovieClip 符号的技术方面。
为了从本文获得最大的收益,需要以下软件和文件:
Flash Professional CS5
Flash Builder 4
示例文件:
(ZIP, 2.7 MB)
本文的目标读者是那些当前使用 Flash Professional 并对结合使用结构良好的 ActionScript 代码和基于 SWF 的内容感兴趣的设计者和开发人员。尽管本文会稍微讨论一下动画概念,但是假设读者有使用 Flash Professional 中的工具的经验。
这个作品采用
许可协议。
了解工具和工作流
本节概述示例项目中涉及的工具和工作流。如果您熟悉 Flash Professional 中的工具,可以跳过这一节,直接阅读 。如果您是刚刚接触 Flash Professional 和 Flash Builder,应该阅读本节。
使用 Flash Professional CS5
Flash Professional 主要用于开发动画和视觉内容,提供帮助提高设计效率的特性。最初,Adobe Flash Player 最令人兴奋的特性是可以在 web 上显示轻量的矢量内容;随着 Flash Player 功能的不断扩展,Flash Professional 中的动画特性也在发展,支持更广泛的创造性任务。
Flash Professional 的近期版本为视觉设计者提供一些出色的特性更新。Flash Professional CS4(和 Flash Player 10)引入了 3D 旋转和动画工具、用于创建动画骨架的 Bone 工具以及基于 XML 动画运动定义的运动 tween(可以跨时间线和项目重用生成的动画)。Flash Professional CS5 继续增加视觉开发工具,它使用 Text Layout Framework 改进了文本支持,引入了使用 Compact Font Format (CFF) 的新式字体嵌入。Flash Professional CS5 还改进了工作流以及与 Flex SDK 和 Flash Builder 的集成,可以使用它们作为代码开发环境。
首先要了解将使用的文件类型:
FLA:在 Flash 中创建新文件时,会创建 FLA 文件。FLA 文件是可编辑的主文件,使用它构建和发布内容,它在概念上与 Photoshop 中的 PSD 文件相似。这个文件属于项目的源代码文件,可以反复编辑它,但是并不把它发布到服务器上供查看。FLA 文件的扩展名是 .fla。
SWF:如果希望分发自己的作品,让其他人可以看到它,就要从 FLA 发布 SWF 文件。SWF 是 FLA 文件的不可编辑的压缩版,这在概念上与从 PSD 文件导出 JPG 或 PNG 文件相似。SWF 文件的扩展名是 .swf。
HTML:当从 Flash Professional 发布 SWF 时,还可以选择发布嵌入 SWF 的 HTML 页面。这个文件是可选的,可以在其他工具中创建它,但是能够从 Flash Professional 生成您需要的所有东西是很方便的。最后,把 SWF 和 HTML 页面上传到服务器上,供在 web 浏览器中查看。
在本教程中,您将使用以下 Flash Professional CS5 工作空间特性:
Stage:Stage 是主时间线上的区域,可以在其中看到图形,还可以看到它们相对于 Flash 电影(SWF 文件)文件尺寸的位置。这个区域与其他设计工具中的 Canvas 或 Artboard 相似。
时间线:通过一系列电影剪辑符号组织 Flash 内容,每个符号包含一个时间线。每个时间线由层和帧组成。层提供与其他设计工具相似的内容隔离,帧表示内容随时间的变化(动画或图形状态)。在创建 FLA 文件时,主时间线作为默认视图显示。主时间线是文件的根容器。
库:除主时间线之外的所有电影剪辑都存储在 FLA 文件的库中。Library 面板包含可重用对象的集合。每个 FLA 文件有一个库。它包含可重用的内容,包括符号、字体、图像以及嵌入的声音和视频。
符号和实例:符号是可重用 Flash 对象的定义。例如,符号可以包含图形、完整的动画或任何其他资产集合。符号只在库中存在。当在时间线上使用符号时,创建符号的实例。这里的关键概念是可以使用任意数量的符号实例,而不会显著增加电影文件的大小。在任何时候都可以编辑符号,这会导致更新所有实例。
属性:要想以不同方式编辑各个符号实例,应该使用实例的属性。属性是描述实例的某些方面的变量。符号实例在本质上总是与它们的父符号相同,但是可以通过修改实例的属性(比如大小、位置、颜色或透明度)来创建独特的变体。这个概念对于创建 tween 动画很重要。可以使用 Properties 面板或连接到时间线的 ActionScript 代码编辑实例属性。
在后面几节中,您将看到 Flash Professional 中的许多其他特性,但是前面的列表涵盖了主要元素。要想进一步了解 Flash Professional CS5 用户界面的基本知识,请参见 Flash 在线文档中的 。
使用 Flash Builder 4
Flash Builder(以前称为 Flex Builder)支持使用开放源码的 Flex 框架开发跨平台 RIA。Flex 本质上是视觉组件和 ActionScript 类的集合,其设计目的是提高开发应用程序的效率。除了 ActionScript 之外,Flex 还提供一种基于 XML 的标记语言,适合使用过其他语言的许多程序员使用。
尽管 Flex 正在成为开发在 Flash Player 中运行的 RIA 的主流方法,但是一些开发人员喜欢使用 Flex Builder(和现在的 Flash Builder)进行纯 ActionScript 开发(也就是说,不使用 Flex 框架)。
Flash Builder 引入了与 Flash Professional CS5 集成的特性,让 Flash 开发人员可以把 Flash Builder 和 Flash Professional 的优势结合起来。尽管可以在 Flash Professional 中创建和编辑 ActionScript 文件,但是 Flash Builder 工作流是一项重大的改进。产品名称的变化表明 Flash Player 内容的开发已不再局限于 Flash 和 Flex,现在涵盖跨 Flash Platform 中多种工具的组合工作流。
Flash Builder 的优势之一是它能够创建和管理代码。它支持并简化了 ActionScript 文件生成,通过代码提示加快编程过程,提供编译时代码检查和调试工具。
下面是在工作流中会遇到的一些文件类型:
AS:在 Flash Professional / Flash Builder 工作流中,在 Flash Builder 中创建 ActionScript 文件。ActionScript 文件通常称为类(class)。正如符号定义 Flash 中的可重用视觉对象,ActionScript 类定义代码中的可重用对象。ActionScript 类存储在称为包(package) 的文件夹结构中。在后面会学习关于类概念的更多知识(如果您不熟悉 ActionScript 类,也不必担心,这个概念很容易理解)。ActionScript 文件的扩展名是 .as。
MXML:MXML 是一种基于 XML 的标记语言,Flex SDK 使用它创建基于 Flex 的 SWF 文件。MXML 文件只用于 Flex 项目,不用于 Flash Professional 项目。但是,它们是在 Flex 中工作的基础,因此有必要提到它们。在使用 Flash Builder 时经常会看到 MXML。
HTML、XML、CSS:Flash Builder 还允许编辑基于其他标准 web 技术的文本文件。
在本教程中使用 Flash Builder 时,将使用以下工作空间特性:
代码编辑器:代码编辑器是工作空间中间的视图,可以在这里看到要写入 ActionScript 文件中的代码。
Package Explorer:Package Explorer 通常出现在用户界面的左上方,它清楚地显示 Flash Builder 项目中的文件。在项目中工作时,可以使用这个视图启动文件和管理资产。
Outline:Outline 视图显示 ActionScript 文件中的各个元素,包括变量和函数。可以使用这个视图查看文件内容的概况,直接跳到文件的特定区域,不需要滚动。这在开发大脚本时尤其方便,可以避免大量滚动操作。
Problems:Problems 视图显示在 ActionScript 文件中发现的代码错误。这个特性在每次保存文件时检查项目中的代码。这个实时的错误检查特性让开发人员可以及时地发现问题,能够节省大量时间。它还允许直接跳到导致错误的代码行。
要想进一步了解 Flash Builder 用户界面的基本知识,请参见 Flash Builder 在线文档中的 (尤其是 &The Flash development perspective& 小节)。
组合的工作流
新的工作流集成让您能够像平常一样使用 Flash Professional 并在两个主要方面使用 Flash Builder:作为代码编辑器加快 ActionScript 开发,或者作为代码的实时调试工具。对于 Flash 开发人员来说,这个工作流的优点是能够以惯用的方式做大多数工作,而在需要开发代码时可以启动 Flash Builder。在 Flash Builder 中,工作流也是开发人员所熟悉的,甚至能够通过按 Control+Enter (Windows) 或 Command+Return (Mac) 在 Flash Professional 中启动 Test Movie 模式。
理解示例项目的结构
如果您熟悉在 Flash Professional 中编写动作和 ActionScript 代码,可能会奇怪为什么要使用另一种工具开发代码。(几年前,当我开始在使用 Flash Professional 的同时使用文本编辑器时,也有这样的疑问。)答案是,这会减少创建代码花费的时间,而且代码组织得更好、更容易理解,最终让代码可以跨项目重用。另外,转移到 Flash Builder 可以提供更多编程简化和调试支持,有助于隔离代码与 FLA 文件。
在下一节中,将把 FLA 文件和 ActionScript 文件保存到提供的项目文件夹中。FLA 文件包含一个库结构,其中包含位图图像和一个符号,将使用 ActionScript 控制它们以创建动画。
在教程的 Flex 部分中,将把作品保存到 Flash Builder 4 文件的默认工作空间文件夹中:[user]/Flash Builder 4/FlexCharacterAnimation/src。
教程:组合动画和 ActionScript
应用程序编程接口 (API) 仅仅是分配给对象的变量和函数的名称,它们描述对象或者让对象做某些事情。例如,如果在一个电影剪辑符号中创建动画,就可以使用电影剪辑的 ActionScript API 启动和停止时间线(play() 和 stop() 是 MovieClip API 中的函数)。还可以使用电影剪辑的 currentFrame 属性(currentFrame 是 MovieClip API 中的属性)判断动画目前处于哪一帧。您很可能曾经在 Flash Professional 中使用 play() 和 stop() 动作控制时间线。本教程将讲解如何为简单的角色动画(包括触发特定图形状态的控制)创建定制的 API。在此过程中,您将学习如何使用编写 ActionScript 代码的最佳实践。
下面的步骤将带领您在符号中设置视觉资产,然后通过 ActionScript 控制它们。如果您熟悉在符号中创建动画,应该已经掌握了其中许多步骤。这个工作流的差异是将用停止动作和帧标签分割时间线中的帧。并不是像常规动画那样直接播放时间线,而是使用 ActionScript 控制时间线并根据命令跳到特定的帧。
在开发任务的 ActionScript 部分,将向代码环境公开帧标签和动画的各个部分。实现方法是编写一个简单的脚本,其中包含与帧标签匹配的属性,以及触发符号以显示图形状态的快捷函数。为了更进一步,还将创建第二个脚本,它根据动画队列中定义的状态序列触发要播放的动画。结果是符号的代码控制的定义和实现。
这种方法的好处是在运行时能够使用 ActionScript 动态地控制动画。这意味着可以随机移动、播放数据驱动的动画状态序列以及以有趣的方式响应用户交互等等。
最好以有条理的方式组织项目,把项目放在它专用的文件夹中。我通常创建一个客户或组织文件夹,然后在其中创建项目文件夹。
按以下步骤创建项目:
下载本文的示例 ZIP 文件,在桌面上解压它。
打开生成的文件夹并检查它的内容。
project 文件夹是本教程中工作的根文件夹。我们将把 FLA 文件和 ActionScript 文件保存在这个文件夹中。
project_completed 文件夹包含完成的教程示例。其中的 flash 文件夹包含本教程第一部分完成的工作,flex 文件夹包含针对 Flex 项目示例修改过的相同文件。如果遇到问题,可以引用这些文件并分析它们。
在 Flash Professional CS5 中构建动画
下一步是构建作为项目的视觉元素的图形状态。这些图形状态代表一个动画角色的表情,可以用按钮或 ActionScript 控制图形状态。本教程将讲解创建角色的基本步骤,包括表情状态、徽标或标签以及用于在运行时控制动画的 ActionScript API。为了简单,将使用提供的图形以逐帧动画的形式构建符号。
这个角色动画依次显示以下图形状态(见图 2),让角色看起来像是在转眼睛:Default、Blink、Look Left、Look Right 和 Look Up。
图 2. 角色动画中的五个图形状态
按以下步骤创建 FLA 文件:
打开 Flash Professional CS5,通过选择 File & New & ActionScript 3.0 创建一个新的 ActionScript 3.0 FLA 文件。把这个文件命名为 CharacterAnimation.fla 并保存在 assets 文件夹旁边的 project 文件夹中。
在库中创建一个新的电影剪辑符号 (Control+F8 / Command+F8)。在 Symbol Properties 对话框中,输入 Character 作为名称,选择 Movie Clip 作为类型。
单击 OK 接受新符号的设置。
现在,先不理会主时间线,看看 Character 符号的时间线。
因为我们知道要创建的动画的状态,现在应该设置 Character符号时间线的结构。为了在一个电影剪辑时间线中划分状态,可以使用关键帧和帧标签以图形方式分割时间线。
首先,把现有的层命名为 assets。
单击时间线上的 Frame 50,按 F5 展开时间线的 50 帧。
在这个示例中,并不像 tween 动画那样直接播放时间线。而是布置图形状态并使用 ActionScript 跳到适当的帧。
在 assets 层上面添加一层,把它命名为 actions。在时间线中添加动作时,最好创建一个完全由 ActionScript 专用的 actions 层。把 ActionScript &代码&集中在这一层上可以让文件更便于管理。
单击 actions 层的 Frame 1,通过选择 Window & Actions 打开 Actions 面板。
在面板的文本编辑器中输入 stop();。
在 actions 层上面添加一层,把它命名为 labels。
选择 labels 层的Frame 1 并在 Properties 面板中输入 default 作为 Label Name。
在 labels 层上单击 Frame 10 并按 F6 添加一个关键帧。
选择新的关键帧并在其中添加帧标签 blink。
重复此过程在以下帧中添加标签:
Frame 20: look_left
Frame 30: look_right
Frame 40: look_up
现在,可以在 Character 符号中添加图像了。这里的工作流假设您已经在另一个图形程序中创建了图像,可以把图像组合起来了。当然,也可以在 Flash 中创建图像。
按以下步骤导入图像并完成符号布局:
返回到 Character 符号的时间线。
单击 assets 层的 Frame 1,通过选择 File & Import & Import to Stage 导入第一个图像。
在出现的对话框中,找到 project/assets 文件夹中的 Charater_default.jpg 文件并单击 OK。注意,图像出现在 Frame 1 上的关键帧中。
选择 Frame 10 并按 F6,在 assets 层中添加一个新的关键帧。
把 Character_blink.jpg 文件导入新的关键帧中。
重复这个过程,导入其他图像并把它们放在以下帧中:
Frame 20: Character_look_left.jpg
Frame 30: Character_look_right.jpg
Frame 40: Character_look_up.jpg
最好添加一个文件夹,在其中保存导入的位图,这会让库的组织更清晰。单击 Library 面板左下角的 New Folder 按钮(文件夹图标)并把新的文件夹命名为 bitmaps。
把位图图像拖放到新的文件夹中。
保存文件。
按以下步骤导入徽标或标签的图像:
返回到 Character 符号的时间线。
单击 assets 层的 Frame 1,在它上面添加一个名为 logo 的新层。
从提供的文件中的 assets 文件夹导入 logo.jpg 文件,把它放在角色的右下角或者您喜欢的其他地方。在这个步骤中,也可以导入自己的图像或添加文本标签。关键是可以在 Character 时间线的 Frame 1 上添加图形,对于所有表情状态,都会看到这个图形。
保存文件。
现在,已经构建了角色动画状态的基本元素(见图 3)。可以使用 ActionScript 按代码中决定的时间依次显示这些静态帧,让它们产生逐帧动画的效果。当然,也可以根据需要创建嵌套的动画,包括 tween 和其他逐帧动画(也就是说,当跳到 blink 状态时,关键帧可以包含嵌套的电影剪辑,其中包含它自己的动画)。
图 3. Character 符号的时间线显示层、帧标签和关键帧的结构
创建用于实现动画的 ActionScript API
完成符号的时间线之后,可以创建一个 ActionScript API,从而通过程序控制 FLA 文件中的视觉资产。第一步是创建一个 ActionScript 类,它向希望知道符号状态的其他 ActionScript 对象声明符号状态。
ActionScript 类是包含按预定义格式编写的 ActionScript 代码的文本文件。总是以相同方式使用格式中的类关键字和语法。编写 ActionScript 类之后,可以把它分配给主时间线或库中任何符号的时间线。
按以下步骤为符号创建 ActionScript 类:
在 Library 面板中右键单击 Character 符号并选择 Properties。
在 Symbol Properties 对话框中,如果还没有显示高级选项,那么单击 Advanced 旁边的箭头。
选择 Export For ActionScript 以启用符号链接。这样就可以通过 ActionScript 访问符号以执行实例化,并让符号通过 SWF 导出。注意,Class 文本框中的值在默认情况下设置为符号名称。现在,新的 Flash/Flash Builder 集成特性就要发挥作用了。
单击 Class 文本框旁边的 Edit Class 按钮(铅笔图标)。
当询问您想在 Flash Professional 中还是 Flash Builder 中编辑类时(见图 4),选择 Flash Builder 并单击 OK。
图 4. Symbol Properties 对话框和 Edit ActionScript 3.0 Class 对话框
Flash Builder 启动并显示 Create A New Flash Professional Project 对话框(见图 5)。这个步骤把 Flash Builder 项目与您的 FLA 文件和项目文件夹关联起来。
图 5. Create a New Flash Professional Project 对话框
单击 Finish。Flash Builder 自动地定义一个名称与 FLA 文件相同的 ActionScript 类,然后打开 New ActionScript Class 对话框(见图 6)。在 Superclass 设置中,可以看出 Flash Builder 将生成一个扩展 MovieClip 的 ActionScript 类。超类是一个脚本,其他脚本继承它的功能。在这里,Character 类的超类是 MovieClip,这意味着 Character 是 一个 MovieClip,因此包含 MovieClip 的所有函数和属性。
图 6. New ActionScript Class 对话框
单击 Finish 生成类。
在 Flash Builder 中,看看 Character.as 文件中的默认代码。这些是 ActionScript 类的基本元素。下面简单分析一下这些代码:
import flash.display.MovieC
public class Character extends MovieClip
public function Character()
第 1 行定义文件所在的包(文件夹)。在这里,没有指定子文件夹,因为 ActionScript 文件直接与 FLA 文件放在一起。
第 3 行导入 MovieClip 类,这样就可以在这个 ActionScript 文件中本地引用它。
第 5 行声明类名并声明这个类扩展 MovieClip 类。这意味着这个脚本是电影剪辑对象,因此能够访问 MovieClip 的所有属性和函数。
第 7 行声明构造函数。构造函数是 ActionScript 类的核心,它的名称总是与 ActionScript 类相同。构造函数的重要性在于当类初始化时会立即调用它。在创建类的新实例时,对类进行初始化,这就像在符号实例化时对符号进行初始化。可以把代码放在构造函数中,这样在创建每个类实例时会立即执行这些代码。这对于初始化与类相关的变量和数据很方便。
下一步是添加定义帧标签的属性。为此,需要添加常量静态属性。常量 意味着值不会变,静态 意味着它们与类定义相关联,因此可以通过类名直接引用它们。这个步骤的目的是以程序方式公开帧标签,这样就可以在代码提示中看到它们,而且在编写代码时文本编辑器可以确保名称是正确的。
在 Character.as 文件的第 7 行(在构造函数上面)添加以下代码:
//*******************
// Constants:
static public const DEFAULT:String = &default&;
static public const BLINK:String = &blink&;
static public const LOOK_LEFT:String = &look_left&;
static public const LOOK_RIGHT:String = &look_right&;
static public const LOOK_UP:String = &look_up&;
static public const PAUSE:String = &pause&;
既然已经向代码环境公开了帧标签,就很容易通过代码提示找到标签名称并使用 gotoAndStop 导航到这些帧。但是,在 API 中创建用于处理导航的新函数是有好处的。
在这个示例中,在第 21 行(在构造函数后面)添加以下代码:
//*******************
// Methods:
public function showState( label:String, play:Boolean=false ):void
// Pause the current state...
if( label == Character.PAUSE ){
if( play ){
gotoAndPlay(label);
gotoAndStop(label);
showState() 函数接受两个参数。第一个参数是要导航到的帧标签,第二个参数指定在这个帧上调用 gotoAndPlay() 还是 gotoAndStop()。开头的条件语句检查标签是否是 &pause&。如果是 &pause&,就从函数返回,从而在当前状态上暂停。这个特性对于处理比较复杂的多帧动画状态很方便。
最后,为了方便,在脚本中添加几个快捷函数。在第 33 行(showState() 函数后面)添加以下代码:
//---------------
// shortcuts
public function blink():void
showState(Character.BLINK);
public function lookLeft():void
showState(Character.LOOK_LEFT);
public function lookRight():void
showState(Character.LOOK_RIGHT);
public function lookUp():void
showState(Character.LOOK_UP);
调用任何快捷函数,就会调用 showState() 函数并传递正确的常量静态属性作为标签。showState() 函数在默认情况下把 play 参数设置为 false。如果适合您的动画,可以使用第二个参数跳到帧标签并播放。尽管如此,但是在这个示例中不这么做,因为没有分隔图形状态的停止动作。
保存文件。
因为我们从 Flash Professional 中的 Symbol Properties 对话框启动 Flash Builder,所以刚才编写的 ActionScript 类已经连接到 FLA 文件的库中的 Character 符号。
继续开发之前,先看一下项目文件夹,可以看到 Flash Builder 已经把 Character.as 文件和 CharacterAnimation.as 文件与 FLA 保存在一起了。在下一节中,我们将使用 CharacterAnimation.as 文件和 Character 符号创建动画。
使用文档类实现动画
在前一节中,使用 Symbol Properties 对话框把 Character.as 类分配给了 Character 符号。其效果与在符号时间线的 Frame 1 上编写代码相同(不使用任何 ActionScript 类语法)。使用外部 ActionScript 类的好处是,可以使用 Symbol Properties 对话框中的基类设置把它分配给任意数量的动画符号。如果要创建许多行为相同但是图形不同的角色,这种方法确实很方便。
可以以相似的方式把 ActionScript 类分配给主时间线。方法是在文档属性中输入类名作为 Document Class。在后面的步骤中,要创建一个文档类,它使用 ActionScript 和符号的代码 API 实例化 Character 符号并创建一个循环的动画。
按以下步骤创建文档类:
返回到 Flash 中的主时间线。
单击 Stage,在 Properties 面板中显示文档属性。
输入 CharacterAnimation 作为 Document Class(见图 7)。这指定 CharacterAnimation.as 文件的类名(类路径)。注意,在 ActionScript 中引用文件时,不要包含文件扩展名。
图 7. Flash Properties 面板中显示的文档属性
单击 Class 旁边的 Edit Class Definition 按钮(铅笔图标)以启动 Flash Builder 并编辑脚本。
在 Flash Builder 中,会看到 CharacterAnimation 类具有前面描述的结构。惟一的差异是这个类扩展 Sprite 而不是 MovieClip(Sprite 是只有一帧的 MovieClip)。
在 CharacterAnimation.as 中,使用一个 Timer 对象驱动动画。
首先导入 Timer 和 TimerEvent 类;在文件的第 4 行和第 5 行添加以下代码:
import flash.events.TimerE
import flash.utils.T
我们要使用计时器以一定的时间间隔调用事件处理函数。我们将创建一个由 Character 符号状态组成的动画队列,每当计时器调用事件处理函数时依次播放队列。因此,下一步是在脚本中添加在生成动画序列时要使用的变量。
在文件的第 9 行添加以下代码:
//*******************
// Properties:
public var target:C
public var states:A
public var state:uint = 0;
public var timer:T
public var timerDelay:Number = 1000; // in milliseconds
target 属性将包含 Character 符号的一个实例。states 属性将包含要作为动画队列依次播放的帧状态列表。state 属性包含当前显示的状态的引用。timer 和 timerDelay 属性定义计时器和播放队列中状态的时间间隔。
接下来,在构造函数中添加代码,当主时间线装载并启动动画时会立即执行这些代码。
在文件的第 20 行(构造函数内)添加以下代码,从而创建 Character 符号的实例:
// Create character instance
target = new Character();
target.x = (stage.stageWidth - target.width) / 2;
target.y = (stage.stageHeight - target.height) / 2;
addChild(target);
启用 Character 符号的 Export For ActionScript 选项,就可以在 ActionScript 中使用这个符号了。target = new Character(); 使用 new 关键字在 ActionScript 中实例化这个符号。这相当于把实例从 Library 面板拖放到 Stage 中。注意,因为 Character 符号是电影剪辑,所以除了它的定制 API 之外,还可以使用它的 x 和 y 属性或其他任何电影剪辑属性。
在第 26 行(刚才添加的代码下面)添加以下代码,从而使用一个数组创建动画队列:
// Create the animation queue
states = new Array();
states = new Array();
states[0] = Character.BLINK;
states[1] = Character.DEFAULT;
states[2] = Character.LOOK_LEFT;
states[3] = Character.LOOK_RIGHT;
states[4] = Character.DEFAULT;
states[5] = Character.BLINK;
states[6] = Character.LOOK_UP;
states[7] = Character.DEFAULT;
states[8] = Character.BLINK;
states[9] = Character.DEFAULT;
请注意数组索引的编号模式。可以按相同的模式添加和删除状态。在这个简单的示例中,只在执行循环之前访问帧标签一次,但是可以在序列中创建任意状态组合和任意长度的动画队列。只需确保按您希望的次序设置状态队列,而且数组索引从零开始递增。
在构造函数代码中,初始化计时器并启动动画;在第 34 行(在以上代码后面)添加以下代码:
// Create a timer to drive the animation
timer = new Timer(timerDelay);
timer.addEventListener(TimerEvent.TIMER, onTimerTick);
timer.start();
最后,需要让角色的状态根据动画队列依次改变。这由在构造函数中设置的计时器的事件处理函数完成。
在第 43 行(在构造函数的后括号后面)添加以下代码:
//*******************
// Events:
private function onTimerTick(event:TimerEvent):void
// Show state from queue
target.showState(states[state]);
// Show next state next time around
// Loop if we've reached the end of the queue
if( state == states.length ){
state = 0;
保存文件。
我们已经使用 Flash 符号和 ActionScript 类创建了一个简单但可伸缩的动画结构。
既然已经完成了一部分工作,现在来测试一下。新的 Flash Builder 集成的优点之一是,能够从 Flash Builder 启动 Flash Professional 以运行 Test Movie 命令、启动调试器或发布 Flash 项目以供部署。
当要预览您的作品时,在 Flash Builder 中按 Control+Enter (Windows) 或 Command+Return (Mac),从而切换到 Flash Professional 并启动 Test Movie 命令。
应该会看到 Test Movie 命令以平常的方式执行,发布 SWF 预览。查看您构建的简单循环动画之后,关闭 SWF 并返回到 Flash Builder 工作空间。
如果遇到问题,可以从 Flash Builder 工作空间启动 ActionScript 3 调试器,通过它查明发生的情况。假设您的文件目前能够正常运行,为了体验调试过程,我们需要人为制造一个 bug。为此,可以声明一个对象,但是不进行实例化,然后尝试调用对象实例的属性或方法。
按以下步骤从 Flash Builder 运行调试工作流:
在 Flash Builder 中,在 CharacterAnimation.as 中构造函数的前括号后面(第 20 行)添加以下两行代码:
var nullObject:A
var length:uint = nullObject.
在 Flash Builder 中编写代码时,这些代码行不会触发任何错误检查,但是它们会导致在 Flash Player 中出现运行时错误。
在 Flash 中启动 Test Movie 命令;在 Flash Output 面板中会出现一个运行时错误:
TypeError: Error #1009: Cannot access a property or method of a
null object reference.
at CharacterAnimation()
返回到 Flash Builder 中,在怀疑的问题位置上添加一个断点;在第 26 行的行号左边右键单击并选择 Toggle Breakpoint,即可在这一行上设置一个断点。
断点会暂停 SWF 的执行,让您能够在调试器中检查所有可用的变量,这对于发现 null 值错误和以其他方式不容易查明的错误尤其有用。
单击屏幕上方 Flash Builder 工具栏中的 Debug Movie In Flash Professional 按钮(bug 和 Flash 图标)。
Flash 启动,播放电影,然后立即停在设置的断点上。调试器打开 CharacterAnimation.as 文件,并显示断点所在的位置和脚本抛出错误的位置(如果有错误的话)。根据这些信息,可以在 Flash Professional 或 Flash Builder 中编辑代码以纠正问题。这里的关键概念是能够在代码行上放置断点,在调试模式下 SWF 的执行在这一行停止。调试器暂停执行代码之后,可以检查在执行 SWF 时变量的状态,从而发现 null 值和其他问题。
返回到 Flash Builder 并删除这两行代码。
再次测试电影,确认一切正常。
保存文件。
如果一切正常,您打算把文件提交到 web 上,可以从 Flash Builder 或 Flash Professional 发布 SWF 和 HTML 页面。
要想从 Flash Builder 发布项目,应该单击屏幕上方工具栏中的 Publish In Flash Professional 按钮。
视图切换回 Flash Professional,这会把 HTML 文件和 SWF 发布到项目文件夹中。检查项目文件夹,查看项目生成的文件。
注意:如果在 Flash Builder 中单击 Publish In Flash Professional 按钮时什么也没有发生,那么要确认文件中没有错误,而且在 Flash Builder 中选择了正确的项目。
这样就行了。Flash Builder 集成工作流教程的第一部分已经结束了。
更进一步:在 Flex 中使用 Flash 项目
随着 Flex 框架在 RIA 开发项目中越来越流行,经常需要处理 Flash Professional 作品,让它们能够在 Flex 项目中使用。与 Flex 相比,某些动画和内容在 Flash Professional 中更容易构建,对于这些动画和内容,这种做法尤其常见。
本节讲解如何把动画转换为适合 Flex 的组件以及在 Flex 中实现组件的前几步。
在 Flash Professional 中准备作品
首先,要处理 Flash 内容,让它能够在 Flex 框架中使用。在 Flash Professional CS5 中,只需运行 Convert Symbol To Flex Component 命令即可完成这一任务。
在下面的步骤中,我们将把 Character 符号转换为可以在 Flex 框架中使用的组件。
按以下步骤处理内容:
在 Flash Professional 中,从 Properties 面板中的文档属性中删除类名(如果没有看到文档属性,那么单击 Stage 的空白区域),从而删除文档类定义。
现在,可以把 Character 符号转换为 Flex 组件了。为此,需要在 FLA 文件中添加 FlexComponentBase SWC 并在 Publish Settings Flash 选项卡上启用 Export SWC 选项。FlexComponentBase SWC 在文件中添加与 Flex 框架相关的 ActionScript,让您的电影剪辑与 Flex 兼容。
在库中选择 Character 符号并选择 Commands & Convert Symbol To Flex Component,FlexComponentBase SWC 就会添加到库中。
注意:如果没有给符号分配定制的类,到这一步操作就完成了。但是,如果分配了定制的类,就需要在 Flash Builder 中更新组件类,让它扩展 mx.flash.UIMovieClip 而不是标准的 flash.display.MovieClip。这就是这个命令尝试执行的操作,但是如果已经在 Flash Builder 中定义了基类,它就无法分配基类。这个解决方法只需简单地修改脚本。
返回到 Flash Builder,把 Character 类中的 import 语句改为:
import mx.flash.UIMovieC
把 extends 关键字后面的类名由 MovieClip 改为 UIMovieClip:
public class Character extends UIMovieClip {
为了让文件能够在 Flex 框架中使用,只需这样修改类并在 FLA 文件的库中添加 Flex SWC。返回到 Flash 完成设置过程。
右键单击 Character 符号并选择 Properties。确认 Base class 设置是空的并单击 OK。
符号的图标会变成 Flex 图标(见图 8)。
图 8. 把 Character 符号更新为适合 Flex 的组件之后 FLA 文件的库
最后,需要导出一个 SWC 文件以供在 Flex 中使用。SWC 文件基本上就是扩展名为 .swc 的 ZIP 文件。它们包含一个 SWF 文件和描述 SWF 内容的元数据。SWC 是以组件形式分发 SWF 内容的标准文件格式。当运行 Convert Symbol To Flex component 命令时,已经相应地配置了您的 FLA 文件。
选择 File & Publish 以导出 SWC。
注意,在项目文件夹中现在出现一个名为 CharacterAnimation.swc 的文件。(在示例的 project_completed/flex/libs 文件夹中也可以找到这个 SWC 文件。)
注意:一定要把 Flash 符号的图形对准它们的时间线左上角的 0, 0 坐标。否则,在 Flex 框架中无法对它们进行可靠的定位控制。
在 Flash Builder 中创建 Flex 项目
Flex 项目完全在 Flash Builder 中定义和构建。要想结合使用用 Flash Professional 开发的内容,需要把前一步骤中创建的 SWC 添加到 Flex 项目的库文件夹中。
按以下步骤创建 Flex 项目并添加 SWC 文件:
返回到 Flash Builder 并选择 File & New & Flex Project。
输入 FlexCharacterAnimation 作为项目名,单击 Finish 以创建项目。
这个项目出现在 Package Explorer 中,自动地生成一个名为 FlexCharacterAnimation.mxml 的文件并在编辑器中打开它。MXML 文件是一种 XML 文件,可以包含包围在
标记中的 MXML 代码和 ActionScript。我们将使用这个文件建立一个简单的用户界面,以便在 Flex 中测试 Flash 组件。让这个文件打开着,后面要编辑它。
注意:Flex 把 MXML 文件和其他源代码文件存储在 Flex 项目文件夹中的 src 文件夹中。
把 CharacterAnimation.swc 文件拖到 Flex 项目的 libs 文件夹中,从而把用 Flash Professional 开发的内容添加到项目中。可以在 Flash Builder Package Explorer 中移动 SWC 文件,也可以在计算机上的文件夹系统中手工移动。文件会出现在 Package Explorer 中(见图 9)。
图 9. Package Explorer 显示 FlexCharacterAnimation 项目
构建操控 Flash 动画的简单用户界面
为了在 Flex 框架中看到用 Flash Professional 开发的内容,我们将通过 MXML 声明组件并添加几个用来触发动画状态的按钮。最终结果将在屏幕上显示角色的两个版本,CharacterAnimation 实例本身实现动画效果,而 Character 实例状态由 Flex 按钮触发。
在下面的步骤中,我们要构建一个简单的用户界面。如果您以前没有使用过 MXML,这是了解如何在 Flex 环境中使用 Flash Professional 作品的好方法。
按以下步骤在 Flex 中构建示例用户界面:
返回到 Flash Builder 中的 FlexCharacterAnimation.mxml 文件。
请注意应用程序的包装器
标记。Application 标记包含许多 xmlns 属性,它们为文件中引用的内容定义名称空间(类路径)。首先,添加一个标识 libs 文件夹中的本地内容的名称空间。
更新 Application 标记,设置 xmlns:local=&*& 属性,如下所示:
这样就可以使用 MXML 引用 libs 文件夹中 SWC 文件中的符号。
在 Application 开始和结束标记之间添加以下代码:
注意,在上面的代码中,可以使用
关于在 Flex 4 中编写 MXML 和 ActionScript 的更多信息,参见 Flex 在线文档中的 。
在 Flex 中,无法像在 Flash 中那样访问 Test Movie 命令。为了测试项目,要在浏览器中启动 SWF。
按以下步骤编译并预览 Flex 项目:
单击 Flash Builder 工作空间上方工具栏上的 Run Project (Run FlexCharacterAnimation) 按钮,在浏览器窗口中启动项目。(也可以选择 Run & Run FlexCharacterAnimation。)应该会看到角色以及图像下面的几个按钮(见图 10)。单击按钮触发表情状态。
图 10. 在 Flex 应用程序中显示的 Character 符号
注意:如果有任何错误导致无法运行项目,这些错误会出现在 Problems 视图中。
构建项目之后,发布的文件出现 bin-debug 文件夹中。
如果应用程序不正常,可以单击 Run Project 按钮旁边的 Debug Project 按钮(bug 图标)以启动 Flash Builder 调试工作空间。
注意:需要安装 Flash Player 的调试版本,才能使用 Flash Builder 调试工作空间。关于在 Flash Professional 和 Flash Builder 中使用调试器的更多信息,请阅读我的文章 。
当项目已经完成,准备提交到服务器时,单击 Export Release Build 按钮(或选择 Project & Export Release Build)。在这种情况下,发布的文件出现在 bin-release 文件夹中。
关于在 Flash Builder 中调试和分析 Flex 应用程序的更多信息,参见 Flash Builder 在线文档中的 。
本教程介绍了 Flash Builder / Flash Professional / Flex 框架工作流,但是动画内容很简单。作为进一步练习,您可以扩展动画符号,增加更多逐帧动画、tween 动画和更真实的动画队列。通过采用这里提供的代码结构,您可以选择 Character 符号中的任何位图图像并把位图改为它们自己的嵌套符号。可以通过创建嵌套动画更好地实践本文介绍的动画状态 概念。
请研究提供的文件中 project_extras 文件夹中的示例,了解如何对每个角色表情使用逐帧动画,从而进一步提高项目的水平。这些额外示例演示嵌套动画、返回动画和 ActionScript 代码变体的使用方法。
我希望您继续研究 Flex 框架并结合 Flash Professional 和 Flash Builder 提供的工作流,从而加深对 Flash Platform 集成的认识。祝您好运!
感谢 Sam Hood 提供示例文件使用的有趣图像和动画帧。可以在
上看到 Sam 开发的更多 Flash 角色动画示例。
Dan Carr 是位于旧金山的
的老板、首席开发人员和培训师。Dan 在 Macromedia 和 Adobe 开发方面有多年经验,他创建了一系列可以在 Flash 中使用的特性,包括电子学习模板、UI 组件和 Developer Resource Kit 扩展。Dan 在北加州教授 Flash 设计和 ActionScript 课程,为公众和 Adobe 产品团队开发电子学习和 web 应用程序。
给InfoQ中文站投稿或者参与内容翻译工作,请邮件至。也欢迎大家加入到中与我们的编辑和其他读者朋友交流。
InfoQ账号使用的E-mail
Youre almost there...
若需查看此内容,
还需要您提供基本的联系/公司信息。
注册信息 Adobe
州/省/直辖市/自治区
架构 & 设计
文化 & 方法
<及所有内容,版权所有 &#169;
C4Media Inc.
服务器由 提供, 我们最信赖的ISP伙伴。
北京创新网媒广告有限公司
京ICP备号-7
注意:如果要修改您的邮箱,我们将会发送确认邮件到您原来的邮箱。
使用现有的公司名称
修改公司名称为:
公司性质:
使用现有的公司性质
修改公司性质为:
使用现有的公司规模
修改公司规模为:
使用现在的国家
使用现在的省份
Subscribe to our newsletter?
Subscribe to our industry email notices?
我们发现您在使用ad blocker。
我们理解您使用ad blocker的初衷,但为了保证InfoQ能够继续以免费方式为您服务,我们需要您的支持。InfoQ绝不会在未经您许可的情况下将您的数据提供给第三方。我们仅将其用于向读者发送相关广告内容。请您将InfoQ添加至白名单,感谢您的理解与支持。}

我要回帖

更多关于 flash循环影片剪辑 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信