文章教程

AS教程:FlashDevelop进行AS3开发

5/10/2018 8:18:23 PM 人评论 次浏览

Webjx核心提示:使用Flash Professional和FlashDevelop进行AS3开发。

创建FlashDevelop项目:
·在FlashDevelop中创建AS3 Flash IDE项目。
·请注意,你可以在现有的FLA文件附近创建这个项目,它不会添加任何文件(并且FlashDevelop永远不会删除现有的文件)。
组织项目
·建议将源代码和发布元素分离开来
·所以在项目中创建两个文件夹:“bin”(或“deploy”)和“src”(即源代码)。
·打开项目属性
·选择Classpaths标签
·在classpath中添加“src”文件夹路径(通过点击来)
保持类和FLA文件在“src”文件夹中,发布的SWF在“bin”(或”deploy”)文件夹中。
提示:为Adobe Flash Professional “fl”类启用代码完成功能:
·打开项目属性
·选择Compiler Options标签
·在Intrinsic Libraries列表中添加Library\AS3\frameworks\FlashIDE
创建Adobe Flash Professional文档(既“FLA”文档)
·启动Adobe Flash Professional(可以在FlashDevelop中按F6来启动)
·新建一个AS3 Flash文档
·在项目的“src”文件夹中保存FLA
·打开发布设置(格式化标签)并把发布目标改为“../bin/xxx.swf”(xxx对应于你的FLA的文件名)那么它将会在合适的目录中生成。
配置FLA
·在Adobe Flash Professional中打开FLA文档
·打开文档的ActionScript设置
·取消选择“自动声明舞台实例”
我们改变的这些设置是非常重要的:
如果我们要为舞台上的元素完成代码这些是必须的。这意味着我们要在我们的类中手动声明舞台上的元素。请注意,你必须声明所有的元素都有一个实例名称。
定义文档类和符号类
文档类:
·文档类是与主时间轴相关联的类(既主类)
·在ActionScript设置或属性面板(点击Flash舞台背景来得到文档属性)中定义文档类(例如:“SampleProjectMain”)
仔细地选择名称来创建一些库元件
·建议的做法是命名元件与他们的类相同(如:MySymbol)
·如果一个元件包含其他元件,这些子元件名应是其父元件类名的组合(如:MySymbol_background)这让人更容易理解元件之间的关系。
提示:元件和类之间的差异
从技术上讲,在AS3中的每个元件都自动有一个相关的类(从来没有直接操作元件),但默认情况下,这些类具有奇怪的名字,因此,我们必须给它们一个固定的类名,使得它们能够导入到我们的代码中。
为ActionScript导出元件:
·在库面板中右击元件,选择“属性…”对话框
·选中“为ActionScript导出”并填入类名(如:MySymbol)
·不改变基类(如:flash.display.MovieClip)
提示:Flash告之类不存在
当你关联文档或元件到一个不存在的类时,Flash将警告类不存在,它将自动生成一个默认类。这不是问题,你可以随时随地创建一个相同名称的自定义类。
编写类
现在是时候回到FlashDevelop上来并创建相应的类:
·在项目的目录树中选择你要创建类的位置
·然后右键:Add>New Class…
·键入类名(不用输入包,它会在生成的类中自动添加)
提示:@author DefaultUser是什么?
首次创建一个类你可能在类注释中看到这个:

/**
* ...
* @author DefaultUser (Tools -> Custom Arguments...)
*/

Custom Arguments是你可以在FlashDevelop中设置并在模板中使用的应用程序变量:
·在主菜单中,选择Tools>Custom Arguments
·把DefaultUser的值替换为你的名字
PS:尝试总是在这第一个注释块中添加一个一般类“角色”的描述(在上面“…”的地方添加)
比方说,我们已经把元件导出为MySymbol类了:

package
{
  import flash.display.MovieClip;
  public class MySymbol extends MovieClip
  {
    public function MySymbol()
    {
      trace("I'm a MySymbol instance called", name);
    }
  }
}

提示:关于文档类和元件类:
·类必须声明为public
·通常你的类将扩展flash.display.MovieClip
·但你可以选择扩展flash.display.Sprite(元件的时间轴将被禁用)
·或扩展其它任意的至少扩展了flash.display.Sprite的用户类
PS:当然,这并不适用于图像,它最终必须扩展flash.display.BitmapData
在舞台上声明元件
正如前面建议的,如果你在FLA的ActionScript设置取消选择“自动声明舞台实例”的话,无论哪一帧显示此元件,我们都必须明确地在父容器类中声明这个元件(如果它有一个自定义类的话)。
例如,在主时间轴上放置一个MySymbol实例,命名它为“mySymbol”。我们必须在文档类中声明它:

package
{
  import flash.display.MovieClip;
 
  public class SampleProjectMain extends MovieClip
  {
    public var mySymbol:MovieClip; // 动态类型
    //public var mySymbol:MySymbol; // 强类型
 
    public function SampleProjectMain()
    {
      trace("I'm the document");
      if (mySymbol) mySymbol.x += 100;
    }
  }
}

提示:关于元件可见性
元件必须声明为public,这是在时间轴上强制元件实例。期间任何其它声明(internal,protected,private)都将失败。
添加“时间轴代码”
虽然有些人认为这是一种不好的做法(addFrameScript()可以用来避免它),但我认为在时间轴中添加一点代码,这是完全可以的,因为它会使你的类更轻量。
例如,如果元件(或主时间轴)是一个多帧动画,并且你想知道什么时候已经到达了一个特定的帧:
·添加“动作”层
·在时间轴上创建一个空白关键帧(例如最新的)
·在帧动作中写入:
lastFrame();
·现在在元件类(或文档类,如果你在主时间轴上的话)声明lastFrame()方法:

package
{
  import flash.display.MovieClip;
 
  public class SampleProjectMain extends MovieClip
  {
    public var mySymbol:MovieClip; // 动态类型
    //public var mySymbol:MySymbol; // 强类型
 
    public function SampleProjectMain()
    {
     trace("I'm the document");
    }
 
    public function lastFrame():void
    {
      trace("we reached the last frame");
      if (mySymbol) mySymbol.x += 100;
    }
  }
}

提示:AS3不像AS1/AS2一样宽容
要注意经常检查你操纵的元件不为空:

//是AS3, 如果mySymbol未定义
mySymbol.x += 100; // 抛出异常
if (mySymbol) mySymbol.x += 100; //正确

下载示例项目
本教程可作为一个FlashDevelop项目示例
·下载示例项目
PS:在示例项目中,类是“打包的”。包是一个单元,是你聚集普通项目或普通角色中类的地方。

教程类别