为 ActionScript 导出库元件

简介: 默认情况下,Flash 文档库中的影片剪辑元件实例不能以动态方式创建(即只使用 ActionScript 创建)。这是因为导出供 ActionScript 使用的每个元件都会增加 SWF 文件的大小,而且众所周知,有些元件可能不适合在舞台上使用。

默认情况下,Flash 文档库中的影片剪辑元件实例不能以动态方式创建(即只使用 ActionScript 创建)。这是因为导出供 ActionScript 使用的每个元件都会增加 SWF 文件的大小,而且众所周知,有些元件可能不适合在舞台上使用。因此,为了使元件可以在 ActionScript 中使用,必须指定为 ActionScript 导出该元件。

为 ActionScript 导出元件:

  1. 在“库”面板中选择该元件并打开其“元件属性”对话框。

  2. 必要时激活“高级”设置。

  3. 在“链接”部分中,激活“为 ActionScript 导出”复选框。

    这将激活“类”和“基类”字段。

    默认情况下,“类”字段会用删除了空格的元件名称进行填充(例如,名为“Tree House”的元件会变为“TreeHouse”)。若要指定该元件对其行为使用自定义类,请在此字段中输入该类的完整名称,包括它所在的包。如果希望在 ActionScript 中创建该元件的实例,但不需要添加任何其它行为,则可以使类名称保持原样。

    “基类”字段的值默认为 flash.display.MovieClip。如果想让元件扩展另一个自定义类的功能,可以指定该类的名称替代这个值,只要该类扩展 Sprite(或 MovieClip)类即可。

  4. 按“确定”按钮以保存所做的更改。

    此时,如果 Flash 无法找到包含指定类的定义的外部 ActionScript 文件(例如,如果不需要为元件添加其它行为),则会显示警告:

    无法在类路径中找到对此类的定义,因此将在导出时自动在 SWF 文件中生成相应的定义。

    如果库元件不需要超出 MovieClip 类功能的独特功能,则可以忽略此警告消息。

如果没有为元件提供类,Flash 将为元件创建一个等同于下面所示类的类:

package 
{ 
    import flash.display.MovieClip; 
     
    public class ExampleMovieClip extends MovieClip 
    { 
        public function ExampleMovieClip() 
        { 
        } 
    } 
}

如果想要向元件中添加额外的 ActionScript 功能,请向下面的代码结构中添加相应的属性和方法。例如,假如有一个包含 50 像素宽和 50 像素高的圆形的影片剪辑元件,并用名为 Circle 的类指定为 ActionScript 导出该元件。以下代码在放入 Circle.as 文件后将扩展 MovieClip 类,同时为此元件提供额外的方法 getArea() 和 getCircumference():

package  
{ 
    import flash.display.MovieClip; 
     
    public class Circle extends MovieClip 
    { 
        public function Circle() 
        { 
        } 
         
        public function getArea():Number 
        { 
        // The formula is Pi times the radius squared. 
        return Math.PI * Math.pow((width / 2), 2); 
        } 
         
        public function getCircumference():Number 
        { 
        // The formula is Pi times the diameter. 
        return Math.PI * width; 
        } 
    } 
}

放置在 Flash 文档第 1 帧的关键帧上的以下代码将创建该元件的一个实例,并在屏幕上显示该实例:

var c:Circle = new Circle(); 
addChild(c); 
trace(c.width); 
trace(c.height); 
trace(c.getArea()); 
trace(c.getCircumference());

此代码演示了基于 ActionScript 的实例化可作为将单个资源拖放到舞台上的替代方法。它所创建的圆形具有影片剪辑的所有属性,同时还具有 Circle 类中定义的自定义方法。这是一个非常简单的示例 — 您的库元件可在其类中指定任意数目的属性和方法。

基于 ActionScript 的实例化功能强大,因为允许动态创建大量实例,而如果采用手动方式来创建将是一项繁重的任务。同时还很灵活,因为您可以在创建每个实例时自定义该实例的属性。您可以通过使用循环动态创建多个 Circle 实例来体会上述优点。在 Flash 文档库中存在上述 Circle 元件和类的情况下,将下面的代码放在第 1 帧的关键帧上:

import flash.geom.ColorTransform; 
 
var totalCircles:uint = 10; 
var i:uint; 
for (i = 0; i < totalCircles; i++) 
{ 
    // Create a new Circle instance. 
    var c:Circle = new Circle(); 
    // Place the new Circle at an x coordinate that will space the circles 
    // evenly across the Stage. 
    c.x = (stage.stageWidth / totalCircles) * i; 
    // Place the Circle instance at the vertical center of the Stage. 
    c.y = stage.stageHeight / 2; 
    // Change the Circle instance to a random color 
    c.transform.colorTransform = getRandomColor(); 
    // Add the Circle instance to the current timeline. 
    addChild(c); 
} 
 
function getRandomColor():ColorTransform 
{ 
    // Generate random values for the red, green, and blue color channels. 
    var red:Number = (Math.random() * 512) - 255; 
    var green:Number = (Math.random() * 512) - 255; 
    var blue:Number = (Math.random() * 512) - 255; 
     
    // Create and return a ColorTransform object with the random colors. 
    return new ColorTransform(1, 1, 1, 1, red, green, blue, 0); 
}

此代码演示了如何使用代码快速创建和自定义元件的多个实例。每个实例都根据循环内的当前计数进行定位,并且每个实例都通过设置 transform 属性(Circle 通过扩展 MovieClip 类而继承该属性)获得了一种随机颜色。

相关文章
|
网络协议 安全 Android开发
软件丨李跳跳们现在该如何跳呢?
前段时间,李跳跳等软件被某大厂发了律师函,之后,好些个跳广告软件都相继发布公众号说明,停止维护软件,并且下架了相关软件,那我们还能跳吗?该怎么跳呢?
1317 0
软件丨李跳跳们现在该如何跳呢?
|
存储 SQL JSON
一些MaxCompute日常优化案例分享
MaxCompute优化是一个多样而又重要的过程,优化过程需要能够深入理解ODPS的工作原理和内部机制,本文总结了以下几个日常优化案例,最终优化手段可能非常简单,但其中的分析过程较为重要,希望对大家有所启发。
|
7月前
|
传感器 人工智能 算法
从宇树创始人谈论机器人的观点中把握创新机会,TRIZ和设计思考有大助力?
法思诺创新专注于探索机器人行业的前沿技术与商业机会。基于宇树创始人王兴兴的观点,文章分析了机器人领域的短期、中期和长期创新方向,涵盖AI驱动的运动控制、低成本硬件设计及通用AI模型等核心技术。同时结合TRIZ与设计思考方法论,为技术创新和场景应用提供系统化解决方案,助力企业把握行业趋势,在降本增效中实现实用化突破,推动机器人从工业到生活的全面普及。
129 0
|
JavaScript Java 测试技术
基于SpringBoot+Vue的租车管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue的租车管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
317 6
|
Linux
全志A64 设备树里的gpio应用开发
全志A64 设备树里的gpio应用开发
263 0
|
存储 人工智能 Android开发
[oeasy]python0132_[趣味拓展]emoji_表情符号_抽象话_由来_流汗黄豆
[oeasy]python0132_[趣味拓展]emoji_表情符号_抽象话_由来_流汗黄豆
1515 0
[oeasy]python0132_[趣味拓展]emoji_表情符号_抽象话_由来_流汗黄豆
|
Linux Android开发 iOS开发
三款 Mac 远程控制(远程桌面)工具
三款 Mac 远程控制(远程桌面)工具
6050 0
|
NoSQL Redis Docker
【Docker】解决创建Redis容器没有conf配置文件
【Docker】解决创建Redis容器没有conf配置文件
3192 0
【Docker】解决创建Redis容器没有conf配置文件
|
Java Android开发
|
安全 量子技术 数据安全/隐私保护