[AS2]路径,包与#include小结:

路径,包与#include小结:
最近做了一个比较大的东东,积累了些比较有用的AS2技巧,拿出点有用的和大家分享先:
有些与脚下本字典有重复了~~~~这里只介绍一些在用的时候需要注意的地方,不涉及OOP编程方面的内容。
1#include
1.1
#inlcude 是用来导入外部脚本的语句,这样的话,
你就可以在FLAS内部加上一句#include "script.as",剩下的事就让体积要小巧多的文本编辑器(如ultraEdit)来完成了。
对于coder们而言,这是比较体面的一种编写代码的方式。
注意,这种方式不可以导入类,适用于写声明类实例之类的代码。
如这样:
var p:test=new test();
p.main();
剩下的事就交给你的类吧,可以完全“类里来类里去了”~~~~


1.2
可以在一个#include 里嵌套加#include ,从而导入另一个脚本文件.

1.3
可以使用一个文件夹来放脚下本文件。
假定你的文件结构是这样安排的:
test+---//这个表示文件夹
 FLA
 SWF
 Script+---
  As.as
用#include "Script/AS.as" 或 #include "Script/AS.as"皆可导入脚本文件.


2包和路径.
其实,等到你写包的时候,你才真正关注起路径方面的事项。
2.1
包在Flash中就是以简单的文件夹的形式形式存在的.
导入某个包中的某个类用:
import myPackage.subPackage.myClass;
导入某个包中的全体类用:
import myPackage.subPackage.*;

2.2
对于写在包中类的声明,要把包的路径给加上去。
class myPackage.subPackage.myClass
interface myPackage.subPackage.myInterface

2.3使用:
2.3.1
比方说,你现在的文件存放结构是这样的:
test+---//这个表示文件夹
 FLA
 SWF
 myPackage+---
  subPackage1+---
             myClass1.as
  subPackage2+---
             myClass2.as 

如果在class1中有用到class2的类对象
那就应该这样声明:
import myPackage.subPackage2.myClass2;
class myPackage.subPackage2.myClass1
{
 private var ins:myClass2;
    ...
}

最终测试时,别忘了在FLASH脚本的路径选项中应有一项 .
注意,是我们看似不起眼的一个".",它表示的是当前fla所在路径.

当然,你也可以选择不用import而导入相对路径.
class myPackage.subPackage2.myClass1
{
 private var ins:myPackage.subPackage2.myClass2;
 ....
}
不过,大多数人应该会认为这样做的话比较麻烦的~~~~

2.3.2
import中起点路径的定义:
import语句中的起点路径如何计算呢?
关键是看你在“首选项”中设定的脚本搜寻的起点位置,
通常是有两项:
.                         //指向当前路径

$(LocalData)/Classes      //指向Flash的类库,如果你的Flash是装在C盘的Program Files里的话,
那么这个类库应该可以通过:
"C:/Program Files/Macromedia/Flash MX 2004/zh_cn/First Run/Classes/"
查看到.

当然,你也可以比较有“个性”的把子路径或者是父级路径设为起点路径:
../                       //父级路径   
./subArchive/             //子级路径
不过我不太推荐这样用.

所以,用import导入的类的起点位置都要以你在“首选项”中设定的脚下本起始路径为基准,
比方说:

test+---//这个表示文件夹
 FLA
 SWF
 myPackage+---
  mySuperClass.as
  subPackage1+---
             myClass1.as
  subPackage2+---
             myClass2.as

首选项中这样设置:
.
$(LocalData)/Classes

那么mySuperClass.as若要用到myClass1.as的(通常指创建类的成员对象或继承)话,则要写:
import myPackage.subPackage1.myClass1;

myClass2.as用到myClass1.as的情况前面已有://一样的.
import myPackage.subPackage1.myClass1;


2.4事情变得复杂时,也许你会觉得有些麻烦了,其实不然,
只要遵循一个原则,当前的类/代码段里有用到哪个类,就把那个类用import给导入.
举例如下:
2.4.1
主场景中用一个简单工厂模式来切换场景当前场景的管理类,代码如下:
var SceneManager:SceneMag=new SceneMag();
var EffectManager:ISEffect=new Effect1();//ISEffect是一个接口类
SceneManager.init();
EffectManager.init();

其中,SceneManager还有各个Effect的自身有含有很多别的子类,那么,是否要把它们一口气全声明进来呢?
根据前面讲的原则,很显然,这里只要导入你当前用的类即可,如下:
import Sdgp.SMag.SceneMag;//场景管理类
import Sdgp.SEffect.*;//效果类,有许多,全部导入.

之后的工作是交给SceneMag类及相应的Effect类去导入它们所要用到的类对象即可:
比方说ScenceMag的声明部分我是这样做的:
import Sdgp.SMag.CSObject;//扩展Object的一个类,用于存放一些自定义的全局属性,用以解决没有枚举类型的问题
import Sdgp.SMag.RCSMag;//继承其抽象父类
import Sdgp.SCom.CSComPhySce;//导入componet组件包中所定义的主场景的部分
import Sdgp.SEffect.*;//导入Seffect包中的所有类,因为这里是用简单工厂模式在创建Effect对象
class Sdgp.SMag.SceneMag extends RCSMag

附:简单工厂模式实现部分的代码:
public function changeItem(num:Number):ISEffect//通过接口类型, 实现多态的创建对象.
 {
  if(num==0)return new Effect1();
  else if(num==1)return new Effect2();
  else if(num==2)return new Effect3();
  else if(num==3)return new Effect4();
  else
  {
   trace("unfinished items");
   return undefined;
  }
 }

2.5
至于Flash类库的使用,还请看FLASH字典或是参考网上高手写的文章吧。

3小结:
希望本文能给和我一样准备拿Flash来做些大项目的朋友们一些帮助.

你可能感兴趣的:([AS2]路径,包与#include小结:)