看到as3在flexb2下已经有了支持预处理的工具...eclipse的框架就是这点好~~
其实MikeChambers早在去年差不多这个时候就提出来了....方法还是蛮巧妙的,说bt比较适合-__-....差不多就是用c/c++编译器,把写好的as文件滤一遍....发现老外的脑子确实动的快,这也和他们对知识的整个框架熟悉有关...唉....扯远了#_#
flash本来也就支持预处理的,比如
#include
#initclip
#endinitclip
第一个,用的必较多,特别是2k4以前
后面两个嘛.MX里面常用来做组件...2k4以后就淘汰了(实际上是必用的,不过我们写的时候不太用就是了)
然后像c/c++里面,其它强大的预处理功能.就没有了
最常用的就是
#define
#ifdef
#endif
....
现在嘛,可以用这个技巧也让as支持一把,:>
首先也去找个c/c++编译器.一般就是gnu,免费的么,这里下,30M多
http://directory.fsf.org/gcc.html
接着解压好像就能用了,还是要安装我也不清楚,反正不复杂的...我机器里面是以前装了个dev-cpp所以一起帮偶搞定了
好了应该有个bin文件夹,里面有个cpp.exe,用的就是它
了解c/c++的就方便了,和我一样不懂的也没关系,只要学会上面说到的#define,#ifdef,#endif就很有用了
比如
functionTest()
{
#ifdefDEBUG
trace("thisisatest");
#endif
}
保存文件为test.p(后缀名基本随意)保存到bin下面
然后cmd下
cpp-DDEBUG-Ptest.ptest.as
后bin下面就会生成一个test.as,自己打开看看,会发现没有了预处理命令,只保留了trace
再试试
cpp-Ptest.ptest.as
会看到trace都没了
这样子,就不会在一些程序里面老多一步无聊的if(_global.G_DEBUG)运算了
然后#define
#defineSIZE10
vara:Array=newArray(SIZE);
for(vari=0;i<SIZE;++i)
a[i]=i;
还是老样子
cpp-Ptest.ptest.as
会发现SIZE的地方都被10代替了..其实#define就是命令行里面的-D
如果你觉得命令行里面输入烦
就可以在之前的文件里面#defineDEBUG,这样就可以在命令行里去掉-DDEBUG,而又程序文件来控制是否定义DEBUG
-P是告诉cpp不要在生成文件内插入行符.
还要说明,如果用cpp滤一下的话,所有注释都没了,要保留注释,需要加一个-C
这里提到的参数都是大小写敏感的,也就是说都要大写
最后提一下,flash本身支持的3个预处理#include..巧了.cpp里面也是有的,而且作用和flash差不多,所以flash里面如果有#include的话..cpp后的生成文件会把#include的文件编译好后一起放入生成文件内
而另外两个c/c++里面没有,所以如果程序文件里面有的话,cpp会报错,不过我想现在估计不太可能再有人用了
看一下下面的范例程序,里面定义的Max实在是比较搓....如果在class里面不定义成dymanic的还会报错...这里只想说一下这么定义也是可以的=_=
#defineSIZE10
#defineMax(x,y)((x)>=(y)?(x):(y))
//---Main----
vara:Array=CreateArray();
#ifdefDEBUG
trace(a);
#endif
Bubble(a);
#ifdefDEBUG
trace(a);
#endif
//-------------
functionBubble(a:Array):Void
{
for(vari=0;i<a.length-1;++i)
{
for(varj=i;j<a.length;++j)
{
if(Max(a[i],a[j])==a[j])//a[j]>a[i]
{
vartmp=a[j];
a[j]=a[i];
a[i]=tmp;
}
}
}
}
functionCreateArray():Array
{
vararr:Array=newArray();
for(vari=0;i<SIZE;++i)
{
arr[i]=random(SIZE);
}
returnarr;
}
cpp-P-Ctest.ptest.as
嗯.记得ox以前抱怨起flash没有预处理,现在好了,虽然不能说就可以像c/c++那样了.不过至少还是有很不错的表现.但估计他早去玩c++了~~~
另外如果对预处理或者cpp想了解更多的看这里
http://gcc.gnu.org/onlinedocs/cpp/
不知道这东西是不是古老了...搞不好我又做了次火星人...唉..想想人家老外一年前就提出来了,又想起来,前两天才刚知道flash里面如何支持浏览器的backbutton这是人家2001年就提出来的啊...