博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ActionScript之package
阅读量:4463 次
发布时间:2019-06-08

本文共 4264 字,大约阅读时间需要 14 分钟。

 
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. public class HelloWorld extends Sprite{
  7. public function HelloWorld(){
  8. var goods:Goods = new Goods();
  9. var myField:TextField = new TextField();
  10. myField.x = 20;
  11. myField.y = 30;
  12. myField.autoSize = TextFieldAutoSize.LEFT;
  13. myField.text = goods.getName(1);
  14. addChild(myField);
  15. }
  16. }
  17. }
// 这是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. public function getName(id:int): String{
  5. if(id == 1){
  6. return "ORDER001";
  7. } else {
  8. return "ORDER002";
  9. }
  10. }
  11. }
  12. }
// 这是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. public class HelloWorld extends Sprite{
  7. public function HelloWorld(){
  8. var order:Orders = new Orders();
  9. var goods:Goods = new Goods();
  10. var myField:TextField = new TextField();
  11. myField.x = 20;
  12. myField.y = 30;
  13. myField.autoSize = TextFieldAutoSize.LEFT;
  14. myField.text = order.getName(1) + " -- " + goods.getName(2) ;
  15. addChild(myField);
  16. }
  17. }
  18. }
// 这是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的雷同:

转载于:https://www.cnblogs.com/xiayong123/archive/2011/11/05/3717429.html

你可能感兴趣的文章
vue-11-路由嵌套-参数传递-路由高亮
查看>>
HDU 1199 - Color the Ball 离散化
查看>>
[SCOI2005]骑士精神
查看>>
Hibernate原理解析-Hibernate中实体的状态
查看>>
六时车主 App 隐私政策
查看>>
C语言常见问题 如何用Visual Studio编写C语言程序测试
查看>>
Web用户的身份验证及WebApi权限验证流程的设计和实现
查看>>
hdu 2098 分拆素数和
查看>>
ECMAScript6-let与const命令详解
查看>>
iOS 使用系统相机、相册显示中文
查看>>
什么是敏捷设计
查看>>
SCSS的基本操作
查看>>
"安装程序无法定位现有系统分区" 问题解决
查看>>
.NET中栈和堆的比较
查看>>
【莫队】bzoj 3781,bzoj 2038,bzoj 3289
查看>>
如何优化limit
查看>>
几种常用数据库字段类型查询语句
查看>>
提高效率必须改掉的7种习惯
查看>>
Java判断语句中判断条件的执行顺序
查看>>
Windows平台下tomcat+java的web程序持续占cpu问题调试
查看>>