ActionScript之package

2024-02-13 07:08
文章标签 package actionscript

本文主要是介绍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的雷同:

这篇关于ActionScript之package的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/704825

相关文章

ORACLE语法-包(package)、存储过程(procedure)、游标(cursor)以及java对Result结果集的处理

陈科肇 示例: 包规范 CREATE OR REPLACE PACKAGE PACK_WMS_YX IS-- Author : CKZ-- Created : 2015/8/28 9:52:29-- Purpose : 同步数据-- Public type declarations,游标 退休订单TYPE retCursor IS REF CURSOR;-- RETURN vi_co_co

UserWarning: mkl-service package failed to import

安装完成anaconda,并设置了两个环境变量  之后再控制台运行python环境,输入import numpy as np,提示错误 D:\InstallFolder\Anaconda3\lib\site-packages\numpy\__init__.py:143: UserWarning: mkl-service package failed to import, therefore

maven 指令之package 和install的区别

https://blog.csdn.net/zy103118/article/details/79901357   maven 指令之package 和install的区别 2018年04月11日 19:08:46 brave_zhao 阅读数:2018更多 个人分类: maven maven package 和 install 区别 原创 2016年08月18日 14:55:26

Flutter-加三方库卡在flutter package get 的解决办法

Windows PUB_HOSTED_URL ===== https://pub.flutter-io.cnFLUTTER_STORAGE_BASE_URL ===== https://storage.flutter-io.cn 增加两个环境变量,然后执行一下 flutter doctor命令。问题完美解决。

【大数据Java基础-JAVA 面向对象11】关键字(二):package/import

1.1 使用说明: * 1.为了更好的实现项目中类的管理,提供包的概念 * 2.使用package声明类或接口所属的包,声明在源文件的首行 * 3.包,属于标识符,遵循标识符的命名规则、规范(xxxyyyzzz)、“见名知意” * 4.每"."一次,就代表一层文件目录。 1.2 举例: 举例一: 某航运软件系统包括:一组域对象、GUI和reports子系统 举例二:MVC设计模式

Complex Networks Package for MatLab

http://www.levmuchnik.net/Content/Networks/ComplexNetworksPackage.html 翻译: 复杂网络的MATLAB工具包提供了一个高效、可扩展的框架,用于在MATLAB上的网络研究。 可以帮助描述经验网络的成千上万的节点,生成人工网络,运行鲁棒性实验,测试网络在不同的攻击下的可靠性,模拟任意复杂的传染病的传

JAVA - package与import解析(一)

一、为什么要引入package和import? 这个问题和c++中引入命名空间是一样的,也是为了解决重名问题。java通过包机制来解决重名问题,也就相当于给重名的代码加一系列前缀,从而达到唯一标识的作用。 二、如何解决重名问题?这个就有点像外国人的名字:如果我叫Jeason,我爸叫Kevin,我爷爷叫Bob,我爷爷的爸爸叫Peter。那么如果没有人和我同名(Jeason),那么Je

Update Azure OpenAI npm Package to 2023-12-01-preview Version

题意:将 Azure OpenAI npm 包更新到 2023-12-01-preview 版本 问题背景: I am currently using the azure-openai npm package in my project with version 2023-03-15-preview. As per the latest updates, version 2023-12

Xcode8安装package manager

从Xcode7升级到Xcode8,或者直接从官网下载安装Xcode8的同学肯定会发现我们熟悉的插件都不能用了。原来window选项卡下有package manager栏目,但Xcode8变没有了。不要捉急,有办法可以让它出来。具体操作如下: 1.打开terminal输入​install update_xcode_plugins ​当你看到这个情况的时候说明你安装失败了,具体