`

actionscript深入不止一点点(程序员篇)

阅读更多

1. 带有命名空间的ActionScript文件 : Package
组织大量的as文件,如何防止命名冲突? 和Java一样,基本思路是使用Package,如:

Js代码 复制代码
  1. // 这是actionscript.不是js代码   
  2. package com.example.programmingas3{   
  3.     public class Goods {   
  4.         public function getName(id:int): String{   
  5.             if(id == 1){   
  6.                 return "IBM Laptop";   
  7.             } else {   
  8.                 return "Samsung MP3";   
  9.             }   
  10.         }   
  11.     }   
  12. }  
// 这是actionscript.不是js代码
package com.example.programmingas3{
    public class Goods {
        public function getName(id:int): String{
            if(id == 1){
                return "IBM Laptop";
            } else {
                return "Samsung MP3";
            }
        }
    }
}



这个文件的目录存放结构必须和包名一致。这里包名是com.example.programmingas3,那么 Goods.as相应地应存储在com\example\programmingas3\下,这样,如果其他人也定义了一个同名Goods.as文件,就可以放到其他包中。从而达到规划大规模源码的基础。

假设com上级目录在d:\,现在考虑编译Goods.as.命令行进入d:\,运行下面的命令编译:
amxmlc com\example\programmingas3\Goods.as

很意外!返回结果:
D:\com\example\programmingas3\Goods.as: Error: A file found in a source-path must have the same package structure '', as the
definition's package, 'com.example.programmingas3'.

为什么呢? 其实和Java程序不一样,带包名的ActionScript是不能直接编译的,必须有一个主文件引导才可以。在包的根目录,这里就是指com上级的目录,在根目录下建立一个主as文件,名为HelloWorld.as,内容如下:

Js代码 复制代码
  1. // 这是actionscript.不是js代码   
  2. package {   
  3.   import com.example.programmingas3.*;   
  4.   import flash.display.*;   
  5.   import flash.text.*;   
  6.   
  7.   public class HelloWorld extends Sprite{   
  8.     public function HelloWorld(){   
  9.         var goods:Goods = new Goods();   
  10.           
  11.         var myField:TextField = new TextField();   
  12.         myField.x = 20;   
  13.         myField.y = 30;   
  14.         myField.autoSize = TextFieldAutoSize.LEFT;   
  15.         myField.text = goods.getName(1);   
  16.         addChild(myField);   
  17.     }   
  18.   }   
  19. }  
// 这是actionscript.不是js代码
package {
  import com.example.programmingas3.*;
  import flash.display.*;
  import flash.text.*;

  public class HelloWorld extends Sprite{
    public function HelloWorld(){
        var goods:Goods = new Goods();
       
        var myField:TextField = new TextField();
        myField.x = 20;
        myField.y = 30;
        myField.autoSize = TextFieldAutoSize.LEFT;
        myField.text = goods.getName(1);
        addChild(myField);
    }
  }
}


上面的代码是用import关键字引用Goods类,然后就可以像在一个文件中使用Goods那样使用它了。

编译:
amxmlc HelloWorld.as
运行
flashplayer HelloWorld

以下是运行结果:



3. 大规模ActionScript文件交换 : .SWC
在实际项目中你总可能使用到第三方的as文件,按照前面学习的知识,第三方提供的as文件通常应该存储在在以自己公司域名命名的目录下(就是按宝组织源码),使用者只要把这些文件复制到本机某个目录下,然后再import进来就可以使用。

问题提出:大量的as文件不方便交换;其二,第三方组织可能不想公开他们的源代码,怎么办? 解决方案是:第三方提供编译的as给你!

前面不是刚说过as不能编译吗? 其实不完全正确,FlexSDK中的compc就可以将那些带包名的as文件编译成swf文件,并打包成一个文件,文件的扩展名是.swc,在Flash中这叫组件。其实组件文件格式实际上是zip, 把扩展名.swc改成.zip用winrar打开看看就知了

好,仍然以前面例子为基础,现在让我们回顾一下代码目录结构


上面还新增了一个Orders.as,内容如下:

Js代码 复制代码
  1. // 这是actionscript.不是js代码   
  2. package com.example.programmingas3{   
  3.     public class Orders{   
  4.            
  5.         public function getName(id:int): String{   
  6.             if(id == 1){    
  7.                 return "ORDER001";   
  8.             } else {   
  9.                 return "ORDER002";   
  10.             }    
  11.         }   
  12.     }   
  13. }  
// 这是actionscript.不是js代码
package com.example.programmingas3{
	public class Orders{
		
		public function getName(id:int): String{
			if(id == 1){ 
				return "ORDER001";
			} else {
				return "ORDER002";
			} 
		}
	}
}


改造过的HelloWorld.as不但调用了Goods.as,而且调用了Order.as

Js代码 复制代码
  1. // 这是actionscript.不是js代码   
  2. package {   
  3.   import com.example.programmingas3.*;   
  4.   import flash.display.*;   
  5.   import flash.text.*;   
  6.   
  7.   public class HelloWorld extends Sprite{   
  8.     public function HelloWorld(){   
  9.         var order:Orders = new Orders();   
  10.         var goods:Goods   = new Goods();   
  11.            
  12.         var myField:TextField = new TextField();   
  13.         myField.x = 20;   
  14.         myField.y = 30;   
  15.         myField.autoSize = TextFieldAutoSize.LEFT;   
  16.         myField.text = order.getName(1) + " -- " + goods.getName(2) ;   
  17.         addChild(myField);   
  18.     }   
  19.   }   
  20. }  
// 这是actionscript.不是js代码
package {
  import com.example.programmingas3.*;
  import flash.display.*;
  import flash.text.*;

  public class HelloWorld extends Sprite{
    public function HelloWorld(){
		var order:Orders = new Orders();
		var goods:Goods   = new Goods();
		
		var myField:TextField = new TextField();
		myField.x = 20;
		myField.y = 30;
		myField.autoSize = TextFieldAutoSize.LEFT;
		myField.text = order.getName(1) + " -- " + goods.getName(2) ;
		addChild(myField);
    }
  }
}



1). 将com包下的文件打包成.swc,准备被HelloWorld.as调用.进入命令行d:\,执行:
compc -include-sources com\example\programmingas3\ -output c:/3rd.swc

这将在c:\生成组件文件3rd.swc

2). 编译主文件HelloWorld.as
  amxmlc -library-path=c:/3rd.swc HelloWorld.as
注意参数-library-path是如何引用组件的。生成的HelloWorld.swf将不必依赖组件文件
3). 运行HelloWorld.swf
flashplayer HelloWorld.swf
结果如下:


最后我们来对比一下Java和SWF的雷同:

分享到:
评论

相关推荐

    actionscript程序员常用的工具类(as3-utils)

    actionscript程序员在写程序的过程经常会遇到一些比较常见的array、color、cookie、string等处理。这里收集的比较全面

    ActionScript 3.0开发技术大全(第一部分)

    第一部分: 第1篇 ActionScript3.0语言基础  第1章 ActionScript3.0概述  第2章 搭建ActionScript3.0开发环境  第3章 ActionScript3.0语法 第2篇 ActionScript3.0面向对象特性  第4章 ActionScript3.0面向...

    actionscript3

    本书是国内第一本“面向原因式”(Why-Oriented Book)、全面系统介绍Flash ActionScript 3的书籍。...使ActionScript 2 程序员能够快速上手ActionScript 3 ,并对ActionScript 2代码移植有相当帮助。

    FlashMX常用ActionScript速查手册(属性篇)

    FlashMX常用ActionScript速查手册(属性篇)

    ActionScript开发技术大全

    第1篇ActionScript3.0语言基础 第1章ActionScript3.0概述 2 1.1ActionScript概述 2 1.1.1ActionScript环境 2 1.1.2ActionScript3.0特性 3 1.1.3ActionScript3.0代码组织 5 1.2ActionScript3.0API概览 5 1.3小结 8 第...

    actionscript 3 as3 pdf

    ActionScript 3.0 是一种强大的面向对象编程语言,它标志着 Flash Player Runtime 演化过程中的一个重要阶段。设计 ActionScript 3.0 的意图是创建一种适合快速地构建效果丰富的互联网应用程序的语言,这种应用程序...

    ActionScript

    第1章 揭开ActionScript的神秘面纱 第2章 Flash MX的动作面板 第3章 ActionScript编程初步 第4章 影片播放控制 第5章 控制影片剪辑 第6章 影片剪辑属性 第7章 影片剪辑方法 第8章 响应键盘 9章 输入文本和字符串...

    Flash程序员上机面试题目

    Flash程序员上级面试题目,ActionScript

    《ActionScript 3.0 语言和组件参考》中文官方版本,无错

    ■ 一个新增的 ActionScript 虚拟机,称为 AVM2,它使用全新的字节码指令集,可使性能 显著提高 ■ 一个更为先进的编译器代码库,它更为严格地遵循 ECMAScript (ECMA 262) 标准, 并且相对于早期的编译器版本,可...

    ActionScript基础 ActionScript基础

    ActionScript基础ActionScript基础ActionScript基础ActionScript基础ActionScript基础ActionScript基础ActionScript基础ActionScript基础ActionScript基础ActionScript基础ActionScript基础

    ActionScript3代码规范

    ActionScript3代码规范 ActionScript3代码规范 ActionScript3代码规范

    ActionScript.3.0宝典(中文版)

    ActionScript3 入门经典,又被称为Actionscript3圣经 本书知识覆盖面广,虽有些方面不够深入,但作为入门教程, 过于深入是不必要的,相信此书会对希望学习AS3的程序员,打开一扇宽广之门

    ActionScript 3.0 API文档(CHM+HTML最新中文完整)

    《ActionScript 3.0 语言和组件参考》概述 《ActionScript 3.0 语言参考》是 Flash® Player 和 Adobe AIR™ 应用程序编程接口 (API) 的参考手册。 此版本包括支持 Adobe AIR 运行时环境的新 ActionScript 类、...

    ActionScript3.0 中文版

    ActionScript3.0 中文版 ActionScript3.0 api 中文版说明文档

    ActionScript 3设计模式

    本书是一本高级ActionScript 3.0设计模式用书。大家或许也一直没有搞明白“高级”一词的含义。高级ActionScript 3.0指的是本书并不包含API引用函数以及ActionScript 3.0的入门基础这些主题。作者假定读者已经具备...

    ActionScript 3.0基础教程

     actionscript 3.0是 flash编程语言的一次重大升级,它更加高效、清晰和完善。本书详细地介绍了 actionscript 3.0的基础知识,包括 actionscript 3.0语言、actionscript 3.0对象的操作方法、显示列表的使用、事件...

Global site tag (gtag.js) - Google Analytics