zoukankan      html  css  js  c++  java
  • ActionScript之package

     
    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. }


    这个文件的目录存放结构必须和包名一致。这里包名是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. }

    上面的代码是用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. }

    改造过的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. }


    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的雷同:
  • 相关阅读:
    counter的使用
    Keras保存模型
    pytorch中F.avg_pool1d()和F.avg_pool2d()
    为什么要进行batchNormalization?
    利用Ajax完成前后端数据传输有关知识(day67)
    ORM中choice参数的设计、Ajax介绍(day66)
    聚合分组查询、F与Q查询、常用字段知识(day65)
    ORM数据库查询操作(单表,多表)(day64)
    CBV源码剖析,模板语法(day63)
    小程序加入购物车抛物线效果
  • 原文地址:https://www.cnblogs.com/xiayong123/p/3717429.html
Copyright © 2011-2022 走看看